2012-10-18 108 views
0

我的.htaccess中有以下重寫規則,前4行應該允許訪問沒有index.php的站點,並且工作正常,直到我添加我試圖用來從網站網址中刪除尾部斜槓的最後一個位。從URL中刪除index.php和尾部斜槓

RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5})$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond $1 !^(uploads|cache|themes|default|admin\.php|favicon\.ico|robots\.txt|index\.php) [NC] 
RewriteRule ^(.*)$ /index.php/$1 

# Remove trailing slashes 
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L] 

當我添加的最後一行,我訪問我的網站的根目錄,在index.php部分被附加到URL,這是爲什麼?

回答

1

當我添加最後一行,並且訪問我的網站的根時,index.php部分被附加到URL,爲什麼是這樣?

這是因爲規則是按順序應用的。你希望重定向發生在之前你將東西路由到/index.php。只需交換這些規則:

# Remove trailing slashes 
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5})$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond $1 !^(uploads|cache|themes|default|admin\.php|favicon\.ico|robots\.txt|index\.php) [NC] 
RewriteRule ^(.*)$ /index.php/$1 [L] 
0

以下規則適用於我。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 

#Removing trailing slash 
RewriteRule ^(.*)/$ /$1 [L,R] 

#Removing index.php 
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=302,NE,L]