mod_alias重定向添加两个尾部斜杠



我有许多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//

我试过:

  1. 从.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。

  1. 在我的规则中添加尾部斜杠:

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

最新更新