用.htaccess文件實現URL重寫

注:第一部分來自 http://www.cnblogs.com/wangkongming/archive/2012/11/13/2768251.html     這位博主的我的網站簡潔   還有詩歌  我我我 。。 喜歡喜歡喜歡php

      第二部分  是本身實踐中寫的html

【一】正則表達式

你是否曾經對一些網站的網址看起來很是清爽,沒有任何.php或.html後綴感到奇怪?他們就是這樣作到的。vim

一、安裝 mod_rewrite 模塊
     由於 Apache 服務器默認是沒有打開 mod_rewrite 模塊的,因此咱們必須手動來啓動。打開 Apache 的配置文件 httpd.conf 文件,找到下面一行:
     #LoadModule rewrite_module modules/mod_rewrite.so
     前面的 # 號是 Apache 配置文件的註釋符,也就是 Apache 服務器沒有加載該模塊。將前面的 # 號去掉,保存後重啓 Apache 服務器,這是咱們就實現了加載 mod_rewrite 這個模塊了。(提示:任何一次對 Apache 的配置文件 httpd.conf 文件都是要從新啓動 Apache 才能生效的)

     二、新建 .htaccess 文件
     在 windows 系統默認的狀況下是不能新建沒有文件名的文件的,這裏建議你們使用 vim 這個編輯器來新建。方法是打開 vim 編輯器隨便輸入一段文字,而後保存爲 .htaccess 便可。不少朋友由於習慣了 windows 系統,因此新建這個文件很頭疼。還有就是文件名必定不要錯,我今天寫的時候把文件保存成了.htacess,看到沒有,少了一個c,怎麼調試都不對,還好 最後發現了這個低級錯誤。
windows

     三、配置 .htaccess 文件
     .htaccess 文件務必放在你項目的根目錄下,不要放在其餘文件夾下。配置 .htaccess 文件的格式以下:

     <ifmodule mod_rewrite.c>
     RewriteEngine On
     #這裏是你的規則
     </ifmodule>

     解釋:RewriteEngine On :啓動URL重寫引擎
     先看以下一個配置好了的 .htaccess 文件實例:
  <ifmodule mod_rewrite.c>
      RewriteEngine On
      RewriteRule ^index\.html$ /index.php [L]
      RewriteRule ^shop/(.+)/$ shop/shop.php?providerId=$1 [L]
  </ifmodule>
瀏覽器

    分析:上面 .htaccess 文件就寫了二條規則。當在瀏覽器中輸入 index.html 時,後臺調用的是 index.php 文件。符號「^」是之後面的字符開頭,相信熟悉正則表達式的朋友不會陌生吧,符號「$」是之前面的字符結尾。符號L表示中止處理接下來的規則。最後一條當 咱們在瀏覽器中輸入 shop/2322 時,後臺調用 shop.php文件並傳遞參數provider=2322 。
    配置規則,你們照着那一條去寫吧,記得每行後面加個 L 符號。服務器

再寫一個:dom

http://www.yourdomin.com/category.php?id=12 想重寫成 http://www.yourdomin.com/category/12 編輯器

  RewriteRule  ^category/([0-9]+)$  category.php?id=$1ide

若是有多頁的文章 如:http://www.yourdomin.com/category.php?id=12&page=3 重寫成 http://www.yourdomin.com/category/12/3

  RewriteRule ^category/([0-9]+)/([0-9]+)$  category.php?id=$1&page=$2

若是你想升級你的站點,又要保證老的連接均可用,你也能夠經過mod_rewrite模塊來實現。你僅僅須要寫一個規則之處這個網頁被永久的移動了。例子以下:

  RewriteRule ^oldpage.html$ newpage.html [R=301]

記錄下來,之後還會用到。

 

 

 

【二】
 
其實我想要的效果就是像他的我的網站那樣 http://www.wangkongming.cn/category/詩歌/    連接的地址這樣顯示
 
//  重定向   連接不帶後綴
RewriteRule ^(blog)([\w/]*)\.([a-zA-Z]+)$          /$1$2 [R=302]

() 括號對應$ 的內容
302 暫時重定向
301 永久重定向
/$1$2    這個 / 能夠去掉系統加在連接上的地址。。。大概這個意思吧
 
上面這句的效果是:將 http://www.wangkongming.cn/category/index.html   連接重定向爲 http://www.wangkongming.cn/category/index
 
--------------------------------------------------------------------------------------------------------------------------------------
可是 http://www.wangkongming.cn/category/index  是訪問不到的。由於生成靜態後,文件夾中的文件是 http://www.wangkongming.cn/category/index.html  這種帶後綴的文件
因此有了下面這句:
 
 //使網站地址  category/index  能夠訪問到 category/index.html  
RewriteRule ^(blog)([\w/]*)$          $1$2\.html [QSA,L]
 
上面這句的效果是:使 http://www.wangkongming.cn/category/index  能夠訪問  http://www.wangkongming.cn/category/index.html
--------------------------------------------------------------------------------------------------------------------------------------
 
我以爲 這兩句結合的話,應該是能夠達到我想要的:
 
//循環重定向
RewriteEngine On
RewriteRule ^(blog)([\w/]*)\.html$           /$1$2 [R=302,L]
RewriteRule ^(blog)/([\d]*)         /$1/$2\.html [QSA,L]

 
可是瀏覽器報錯  :請求地址在循環重定向
 
恩 ,而後沒有解決的
 
.htaccess  放在根目錄
 
這個網站系統是 基於PHP的
相關文章
相關標籤/搜索