2013-01-12 35 views
1

也許這看起來是一個非常簡單的問題,我的網站的網址寫得非常糟糕,所以我想重寫它們。所以我正在準備激活mod_rewrite。問題如下:使用mod_rewrite來重寫網址

假設我的網址從site_url/index.php?page=mypage&type=mytype切換到site_url/mypage/mytype,如果刷新頁面會發生什麼情況,是否需要在.htaccess文件中輸入進行重寫的相反過程?

+0

你怎麼想重寫?什麼來自瀏覽器的URL,它應該如何看起來像內部? –

+0

@OlafDietsche我想要這個網址site_url.index.php?page = mypage&type = mytype顯示爲site_url/mypage/mytype,所以我想知道當我刷新頁面site_url/mypage/mytype時發生了什麼,以及什麼是當我用這個相同的URL獲取請求時,我的代碼的路由不支持 – user1611830

+0

URL從不從「site_url/index.php?page = mypage&type = mytype」切換到「site_url/mypage/mytype」,是相反,我認爲這是造成混亂的原因。第一步是在瀏覽器的地址欄中輸入「site_url/mypage/mytype」。它始終顯示的URL,甚至不必存在的路徑。下一步是使用mod_rewrite指令捕獲該請求,將其靜默映射到現有資源(如PHP文件)。該操作是隱藏的,由「漂亮」URL觸發,而不是相反。 –

回答

2

您需要重定向和重寫的組合。 URL重寫過程的概要草稿將爲:

  • 如果URL包含.php,301/302將請求重定向到其易於使用的SEO版本。這將改變瀏覽器地址欄中的地址。
  • 如果SEO友好的URL被請求,重寫它的PHP版本。這不會更改瀏覽器地址欄中的地址。

這裏是一個做了以上的兩個重寫規則非常基本例如:

# 
# redirect /index.php?page=somepage&type=sometype to friendly url 
# 
RewriteCond %{THE_REQUEST} /index\.php 
RewriteCond %{QUERY_STRING} page=(\w+)&type=(\w+) 
RewriteRule ^index\.php$ /%1/%2? [R,L] 

# 
# rewrite /somepage/sometype to index.php 
# 
RewriteRule ^(\w+)/(\w+)$ index.php?page=$1&type=$2 
0

在.htaccess,你應該做它映射向前......

^/(mypage)/(mytype) to index.php?page=$1&type=$2 

但反過來應該單獨留在家中。所以直接請求site_url/index.php?page=mypage&type=mytype只需按原樣傳遞。

因此,刷新不會改變任何東西。

+0

事實上,我的問題是當我刷新頁面site_url/mypage/mytype時發生了什麼,以及當我使用此代碼的路由不支持的相同url獲取請求時發生了什麼, – user1611830

+0

@ user1611830,你是什麼意思由「代碼的路線」?重定向?重寫?需要特異性。此外,刷新與新的獲取請求沒有區別,只是瀏覽器不會在某些其他項目上使用緩存。 – Grumpy