2012-03-30 36 views
4

我一直在拉我的頭髮,試圖找出這一點,但沒有任何工作。我有一個網頁在mysite.com/test.php我想做一個簡單的URL重寫,並更改爲mysite.com/testRewrite/做執行的代碼,這應該是:.htaccess RewriteRule可以工作,但URL在地址欄中沒有更改?

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^testRewrite/$ test.php [NC,L] 

無論出於何種原因,它只是不起作用。當你去到新的URL - mysite.com/testRewrite/它的工作原理。

但是,如果您輸入原始URL mysite.com/test.php它不會將地址更改爲瀏覽器中的新URL。

回答

10

mod_rewrite不會自動強制重定向瀏覽器從重寫的URL。你只是說「如果有人要求/testRewrite/,內部將其更改爲/test.php」的規則。當然這並不能處理實際請求/test.php,這就是爲什麼當您嘗試訪問mysite.com/test.php,它給你/test.php。現在

,與mod_rewrite的問題是,如果你只添加規則:

RewriteRule ^test.php$ /testRewrite/ [L,R=301] 

當它要求/test.php/testRewrite/,第一條規則將被應用在瀏覽器重定向後會重定向瀏覽器,並的URI被改寫爲/test.php,然後它回穿過整個重寫引擎和上面的規則被再次施加,從而將瀏覽器重定向,因此第一規則重寫爲/test.php,並且上述規則再次重定向,等等,等等你會得到一個重定向循環。你必須添加一個條件,以確保瀏覽器*實際請求/test.php,並且它不是一個已經通過重寫引擎攪動一個URI:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php [NC] 
RewriteRule ^test.php$ /testRewrite/ [L,R=301] 

這樣,301重定向發生後,這條規則不會得到因爲實際請求將會是GET /testRewrite/ HTTP/1.1,並且條件將不會被滿足。

+0

嗯...我們變暖了,但仍然沒有鍛鍊。我試着使用你的代碼,它絕對將瀏覽器中的URL改爲** mysite.com/testRewrite/**,但它不顯示頁面。相反,我得到一個404 Not Found錯誤。 – DJSK 2012-03-30 19:37:36

+0

另外,我不是真的想重定向,因爲它仍然是相同的頁面,無論你是否告訴瀏覽器去** mysite.com/test.php **或** mysite.com/testRewrite/**它仍然相同的頁面。我對使用mod_rewrite的理解是,當您使用RewriteRule時,瀏覽器中的URL應該通過規則進行更改。通過這種方式,您可以隱藏動態網址併爲其製作更友好的SEO版本。 – DJSK 2012-03-30 19:41:38

+0

哦,我現在工作。我在現有的代碼之後添加了您的代碼,並且它可以工作 感謝Jon Lin。 – DJSK 2012-03-30 19:48:09

相關問題