我有以下.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]
但是在所有情况下我都收到错误消息,表明页面没有正确重定向。请记住,我只希望上面的特定网址,我不关心网站的其余部分。
答案 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
标志。
确保在测试此更改之前清除浏览器缓存。