2013-10-01 78 views
3

我正在使用CodeIgnter,因爲我的所有鏈接都像base.com/index.php/home/indexwww.base.com/index.php/home/index。 我想只能作爲base.com/home/index顯示他們,如果possible.I試圖尋找在互聯網上,得到了在htacces重寫從他們兩人爲:重寫www到非www和index.php CI

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$0 [PT,L] 
RewriteCond %{HTTP_HOST} ^domain\.com\$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.domain\.com\$ 
RewriteRule ^/?$ "http\:\/\/domain\.com\/" [R=301,L] 

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC] 
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L] 

把它們分開,他們工作。但他們不會做我需要他們做的事情。 任何人都知道解決方案?謝謝。

回答

6

對於CI,您需要類似於第一組規則的內容,但沒有重定向。但重定向需要在路由發生之前發生,因此請嘗試:

RewriteEngine On 

# redirect www to non-www 
RewriteCond %{HTTP_HOST} ^www\.base\.com$ [NC] 
RewriteRule ^(.*)$ http://base.com/$1 [L,R=301] 

# redirect direct requests to /index.php to remove it 
RewriteCond %{THE_REQUEST} \ /index\.php/?([^\?\ ]*) 
RewriteRule^http://base.com/%1 [L,R=301] 

# internally route to /index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [PT,L] 
+0

非常感謝:)。 –