2014-01-18 119 views
4

有兩件事情我想用.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/

如何解決此問題?或者有沒有更簡單的方法來實現這一點?

謝謝

+0

似乎都很正常。你的PHP代碼是什麼樣的? –

+0

在這兩種情況下都不需要%{REQUEST_URI},並且應該轉義%{THE_REQUEST}檢查中的點。也就是說,規則應該起作用。您可能有其他規則處理重寫的url,或者您的php代碼實際上並未檢查$ _GET變量,而是以不同方式處理請求。 – Sumurai8

回答

0

嘗試下列規則:

RewriteEngine On 

RewriteCond %{THE_REQUEST} \s/index\.php\?category=([^&\s]+) [NC] 
RewriteRule^/category/%1? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^category/([^/]+)/?$ /index.php?category=$1 [NC,L,QSA] 

RewriteCond %{THE_REQUEST} \s/index\.php\?([^&\s]+) [NC] 
RewriteRule^/%1? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/?$ /index.php?$1 [QSA,L] 
+0

第一行,'RewriteCond%{THE_REQUEST} \ s/index)\?category =([^&] +)[NC]'給我500個內部錯誤。 – iamhaho

+0

抱歉有錯字,修正了它。你現在可以試試嗎? – anubhava

+0

這些是我現在收到的鏈接。該頁面也無法正確顯示。 'http:// www.hostname.com/myquestions%20HTTP/1.1','http:// www.hostname.com/category/pol%20HTTP/1.1' – iamhaho