2

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

因此,我需要在物理上重写搜索引擎的每个 URL,并且在结尾没有斜杠时,将 301 重定向到条件的人。

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

我在逻辑上做了这个 .htaccess

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

但它正在重定向循环。请你帮我把它写正确。主要目的是让用户和 SE 看不到结尾斜杠 URL,但脚本需要在服务器内部使用结尾斜杠重写 URL。

4

1 回答 1

1

但它正在重定向循环。请你帮我把它写正确。主要目的是让用户和 SE 看不到结尾斜杠 URL,但脚本需要在服务器内部使用结尾斜杠重写 URL。

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

所以是这样的:

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

(只改变了第一个条件)

于 2012-09-28T10:01:46.657 回答