当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。
答案 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]
(只改变了第一个条件)