我有许多URL可以带或不带尾部斜杠。它们被用作虚 URL。
.htaccess看起来像这样:
Redirect 301 /folder/vanity1 http://example.com/differentfolder/
Redirect 301 /folder/vanity2 http://example.com/a/third/folder/
Redirect 301 /vanity3 http://example.com/fourth/folder/
用户输入:
http://example.com/folder/vanity1
http://example.com/folder/vanity2
http://example.com/vanity3
http://example.com/folder/vanity1/
http://example.com/folder/vanity2/
http://example.com/vanity3/
当用户键入没有尾部斜杠的这些内容时,重定向工作正常,最终http://example.com/differentfolder/
根据需要使用一个尾部斜杠。
问题:
当用户使用尾部斜杠键入这些内容(例如http:/example.com/folder/vanity1/
)时,他们会重定向到带有两个尾部斜杠的 URL,例如引发 404 错误的http://example.com/differentfolder//
。
我试过:
- 从.htaccess中删除所有其他行,除了这三个虚URL和保持网站运行所需的标准WordPress块。WordPress块出现在文件的最后:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我不仅用浏览器检查了,还用WebConfs HTTP标头检查检查,以确保我没有看到缓存的规则。仍然是一样的,如果您键入一个没有尾部斜杠的虚 URL,它可以工作;如果使用一个尾部斜杠键入它,它将重定向到两个尾部斜杠,从而导致 404。
- 在我的规则中添加尾部斜杠:
Redirect 301 /folder/vanity1/ http://example.com/differentfolder/
如果用户键入尾部斜杠,这工作正常,但如果他们省略斜杠,则不会重定向和 404,因为 URLhttp://example.com/folder/vanity1/
实际上并不存在。
问题:
有没有不同的方法可以将 301 将虚 URL 重定向到只有一个尾部斜杠的最终目的地,无论访问者在虚 URL 中以哪种方式键入 - 有或没有尾部斜杠?
这在Redirect
中记录了
匹配的 URL 路径之外的其他路径信息将追加到目标 URL。
这意味着/folder/vanity1
仅用作前缀,并且请求的URL中的附加斜杠或其他任何内容都将附加到目标中,例如http://example.com/folder/vanity1/hi/there
会导致http://example.com/differentfolder//hi/there
如果要完全匹配这两个 URL(/folder/vanity1
和/folder/vanity1/
),则必须使用RedirectMatch
或 mod_rewrite
有了RewriteRule
这看起来像
RewriteRule ^folder/vanity1/?$ /differentfolder/ [R,L]
此模式匹配带或不带尾部斜杠,因为/?
表示可选的斜杠。其他规则看起来类似。
当一切正常时,您可以将R
替换为R=301
(永久重定向)。永远不要用R=301
进行测试。
有了RedirectMatch
,它看起来几乎是一样的
RedirectMatch ^/folder/vanity1/?$ /differentfolder/
此处适用相同的免责声明,当它按预期工作时,您可以将状态代码设置为301
。