提问人:Andrew G. Johnson 提问时间:11/28/2008 更新时间:11/17/2009 访问量:2892
如何强制某些页面以斜杠结尾 [.htaccess]
How can I force some pages to end in a slash [.htaccess]
问:
这是一个多站点问题。我有很多带有.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 链接。
答:
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]
评论