重写规则不向用户显示斜杠&显示脚本的斜杠

时间:2012-09-28 09:49:16

标签: .htaccess mod-rewrite url-rewriting slash

当CMS创建重复项时,我处于这种情况。每个页面都可以在最后用斜杠打开而不用。

所以我需要在物理上重写搜索引擎的每个网址,并且在最后没有斜线的情况下,301重定向的人会重新调整。

但问题是脚本会停止工作,因为它只适用于URL末尾的斜杠。

我在逻辑上做了这个.htaccess

RewriteCond %{REQUEST_URI} ^(.*)/$ [NC]
RewriteRule ^(.*)(/) $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L]

但它正在重定向循环。请你帮我把它写得正确。用户和SE应该看到的主要目的是没有end-slash URL,但服务器上的脚本需要在内部重写带有end-slash的URL。

1 个答案:

答案 0 :(得分:1)

  

但它正在重定向循环。请你帮我把它写得正确。用户和SE应该看到的主要目的是没有end-slash URL,但服务器上的脚本需要在内部重写带有end-slash的URL。

如果您要重定向,则需要匹配实际请求,否则,URI会被重写,并且您的第一个规则会与之匹配并重定向(再次,一次又一次)。

这样的事情:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]*?)/($|\ )
RewriteRule ^(.*)(/) $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L]

(只改变了第一个条件)