0

我的 .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,这是为什么呢?

4

2 回答 2

2

当我添加最后一行并访问网站的根目录时,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]
于 2012-10-18T20:08:23.137 回答
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]
于 2017-05-24T11:37:01.487 回答