有兩件事情我想用.htaccess文件實現。 第一個是htaccess外部重寫/內部重定向
www.hostname.com/index.php?question -> www.hostname.com/question
www.hostname.com/index.php?myinfo -> www.hostname.com/myinfo
www.hostname.com/index.php?notification -> www.hostname.com/notification
所以我用外部重寫重新表達的網址如下。
RewriteCond %{THE_REQUEST} /(index.php)\?([^&]+)\ HTTP
RewriteRule^/%2? [R=301,L]
現在上面的語句正確顯示,因爲我想。問題是當條件滿足時內部轉換回來。條件是%{THE_REQUEST}
等於'/
'後面的任何字符。
RewriteCond %{REQUEST_URI} ^/(.*)$ [NC]
RewriteRule ^(.*)$ index.php?$1 [NC,L]
這樣我的php代碼就可以識別出$_GET
參數。在這裏,即使滿足條件,它也不會處理RewriteRule。
第二個問題是
www.hostname.com/index.php?category=spo -> www.hostname.com/category/spo
www.hostname.com/index.php?category=ite -> www.hostname.com/category/ite
www.hostname.com/index.php?category=gam -> www.hostname.com/category/gam
轉換使用exteral重寫完成:
RewriteCond %{THE_REQUEST} /(index)\?category=([^&]+)\ HTTP
RewriteRule^category/%2? [R=301,L]
同樣,我想轉換回無論是寫在URL回原來的格式所以我用以下的條件來區分以前的情況,
RewriteCond %{REQUEST_URI} ^/category/(.*)$
RewriteRule ^category/(.*)/?$ index.php?category=$1 [NC,L]
我的php代碼無法識別$_GET
參數和變量。當我使用htacces測試儀時,它說它應該可以工作,但它不會。 http://martinmelin.se/rewrite-rule-tester/
如何解決此問題?或者有沒有更簡單的方法來實現這一點?
謝謝
似乎都很正常。你的PHP代碼是什麼樣的? –
在這兩種情況下都不需要%{REQUEST_URI},並且應該轉義%{THE_REQUEST}檢查中的點。也就是說,規則應該起作用。您可能有其他規則處理重寫的url,或者您的php代碼實際上並未檢查$ _GET變量,而是以不同方式處理請求。 – Sumurai8