我的.htaccess中有以下重写规则,前4行应该处理允许访问没有index.php的网站,并且工作正常,直到我添加我正在尝试的最后一位用于从站点URL中删除尾部斜杠。
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,为什么会这样?
答案 0 :(得分: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]
答案 1 :(得分: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]