如何强制某些页面以斜杠结尾 [.htaccess]

How can I force some pages to end in a slash [.htaccess]

提问人:Andrew G. Johnson 提问时间:11/28/2008 更新时间:11/17/2009 访问量:2892

问:

这是一个多站点问题。我有很多带有.htaccess文件的网站,其中有多行类似于:

rewriterule ^(page-one|page-two|page-three)/?$ /index.php?page=$1 [L]

这意味着 www.domain.com/page-one 和 www.domain.com/page-one/ 都将加载 www.domain.com/index.php?page=page-one

但是,我总是被告知,确保每个页面只使用一个 URL 是很好的 SEO 做法,所以我想做的 www.domain.com/page-one 通过 .htaccess 文件重定向到 www.domain.com/page-one/。

请注意,我不是在寻找的答案是从行尾删除 ?$,因为这只会导致 www.domain.com/page-one 成为 404 链接。

.htaccess域名

评论


答:

1赞 Konrad Rudolph 11/28/2008 #1

未经测试,但你不能这样做吗?

RewriteRule ^(.*[^/])$ $1/
RewriteRule ^(page-one|page-two|page-three)?$ /index.php?page=$1 [L]
2赞 user3850 11/28/2008 #2

使用 HTTP 重定向将使用“错误”URL 的用户发送到正确的 URL。例如,您可以使用:

    RewriteRule ^(.+[^/])$ $1/ [R]

在你自己的 RewriteRule 之前。

但要注意:这也会为以文件名结尾的 URL 添加斜杠。如果您有这样的 URL,则必须在重定向之前为它们设置例外。

另请参阅有关尾部斜杠的常见问题解答条目mod_rewrite示例页面

4赞 Andrew G. Johnson 11/17/2009 #3

这是一个片段,用于强制所有内容以斜杠结尾

rewritecond %{REQUEST_FILENAME} !-f
rewritecond %{REQUEST_URI} !(.*)/$
rewriterule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]