从这个重写的url中删除正斜杠

时间:2012-02-27 16:17:35

标签: mod-rewrite redirect url-rewriting

我知道这可能听起来有些愚蠢,但没有其他方法可以解决它。我有正斜杠/的问题。我想将其从网址中删除,因为它会给浏览器带来一些混淆,这些浏览器会提供受信任或不受信任的网址。

这是主域的代码:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^ /user [R=301,L]

这是上述代码的输出:https://www.mydomain.com/user/

但我希望网址重定向到此:

https://www.mydomain.com/user

我还想从此网址中删除正斜杠:

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(?:\.\w+|/)$
RewriteRule (.*) /$1/ [R,L]
RewriteCond %{REQUEST_URI} ^(/end)
RewriteRule ^(.*)$ /top/right/left/bottom/$1 [L]
RewriteCond %{REQUEST_URI} ^/top/right/left/bottom
RewriteRule top/right/left/bottom/(end)(/(./*))?$ $1$2 [R,L]

这是上述代码的输出:https://www.mydomain.com/end/

但我希望网址重定向到此:

https://www.mydomain.com/end

上一个问题:为什么我必须在某些浏览器(如FF或Chrome)中自行编写 www。,以便重定向使自己成为所需的网址?

感谢所有评论

2 个答案:

答案 0 :(得分:1)

看起来上面的重写规则是由我写的。因此,优化网址不会以/https://www.mydomain.com/end

结尾

将整个(从RewriteCond %{ENV:REDIRECT_STATUS} 200更改为RewriteRule top/right/left/bottom/(end)(/(./*))?$ $1$2 [R,L])事物替换为:

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteRule ^(end)(?:/(.*))? /top/right/left/bottom/$1/$2 [L]

RewriteRule ^top/right/left/bottom/(end)(/.*)?$ $1$2 [R,L]

请记住,如果您使用这样的正斜杠访问:https://www.mydomain.com/end/将不会删除正斜杠。

如果您希望删除/:请用以下内容替换最后两条规则:

RewriteRule ^(end)(?:/(.+))? /top/right/left/bottom/$1/$2 [L]

RewriteRule ^(end)/$ $1 [R,L]   
RewriteRule ^top/right/left/bottom/(end)(/.*)?$ $1$2 [R,L]

答案 1 :(得分:0)

将url存储在变量中并执行rtrim以删除尾部斜杠

$redirectURL = rtrim($redirectURL, "/");