如何使用htaccess从特定URL中删除正斜杠

时间:2016-09-23 13:18:05

标签: php .htaccess

我有以下.htaccess文件

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

我有以下网址:

http://localhost/mysite/loginPage/

我想确保此网址永远不会以正斜杠(loginPage /)结束。

我尝试使用以下几行:

RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteRule ^([^/]+/[0-9]+/[0-9]+/[0-9]+/[^/]+)/.+$ - [L,R=404]

但是在所有情况下我都收到错误消息,表明页面没有正确重定向。请记住,我只希望上面的特定网址,我不关心网站的其余部分。

2 个答案:

答案 0 :(得分:2)

这取决于您为重写放置规则的位置。您提供的示例确实有效。但是你必须把它们放在最后一个htaccess线之前。

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

这将创建正确的输出,并可以通过htaccess tester

之类的东西进行测试

如果你只是想要那个网址,你可以诉诸:

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^mysite/loginPage/$ mysite/loginPage? [R=301,L]
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

您还可以使用

指定绝对重定向
RewriteRule ^mysite/loginPage/$ http://%{HTTP_HOST}/mysite/loginPage? [R=301,L]

答案 1 :(得分:1)

  

我希望这只是针对上面的特定网址

在这种情况下,您的规则应该专门匹配此URI而不是.*/.*等。

你的规则如下:

RewriteEngine on

RewriteCond %{REQUEST_URI} ^(/mysite/loginPage)/$ [NC]
RewriteRule ^ %1 [L,R=301]

RewriteCond $1 !^(index\.php|resources|robots\.txt) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php/$0 [L]

您在最后一条规则中也不需要QSA标志。

确保在测试此更改之前清除浏览器缓存。