3
我試圖在htaccess文件如下:的.htaccess重定向循環時,重定向和重寫規則一起
我要301重定向這個 - >http://www.domain.com/somepage.php?page=foo
本 - >http://www.domain.com/my-pretty-url/
這工作得很好,當我修改網站上的內部鏈接閱讀我多麼想和我不使用的R = 301標誌:
RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]
但是...日這裏的順利是我也想301將任何外部請求重定向到服務器,當我處理它時,它將我置於重定向循環中。
RewriteCond %{REQUEST_URI} /index.php$
RewriteCond %{QUERY_STRING} ^page=foo$
RewriteRule ^.*$ http://www.domain.com/my-pretty-url/? [R=301,L]
RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]
的規則的RewriteCond不要被自己的工作,只有在底部的一個重寫規則的工作方式本身內部重寫,但它不處理外的請求。
顯然,如果我兩者都在一起,它會創建一個循環。我如何解決這個問題?
謝謝!
感謝您的快速回復,但我想我會在這裏留下了一個細節都被調用的頁面是一個CMS,頁面不能真的被重命名,所以「page =」參數是必需的。你和我都有的解決方案是假設頁面實際上被重命名爲漂亮的URL(true?)。 – gtr1971 2012-02-01 21:17:08
@GregR。這是理想的,但不必將網頁重命名爲漂亮的網址。如果用戶使用頁面參數單擊舊頁面,則第一條規則會將它們重定向到漂亮的URL。第二條規則會將其重寫回舊的url(就像CMS期望的那樣),而另外的'RewriteCond'將防止循環。 – 2012-02-01 21:29:35
我遺漏了「?」在漂亮的url重寫規則的末尾。一旦我把它,它完全奏效。謝謝!! – gtr1971 2012-02-01 21:37:26