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

时间:2017-03-23 14:13:10

标签: .htaccess redirect mod-alias

我有许多网址,可以输入或不输入斜杠。它们被用作虚荣网址。

.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/)输入这些斜杠时,会将其重定向到带有两个尾部斜杠的网址,例如http://example.com/differentfolder//会引发404错误。

我尝试过:

  1. 从.htaccess中删除所有其他行,除了这三个虚URL和标准的WordPress块以保持站点正常运行。 WordPress块出现在文件的最后:
  2. # 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 Header Check,以确保我没有看到缓存规则。同样,如果你键入一个没有斜杠的虚荣URL,它就可以工作;如果您使用一个尾部斜杠键入它,它会重定向到两个尾部斜杠,从而产生404。

    1. 在我的规则中添加尾部斜杠:
    2. Redirect 301 /folder/vanity1/ http://example.com/differentfolder/

      如果用户键入尾部斜杠,这样可以正常工作,但是如果他们不使用斜杠,则不会重定向和404s,因为URL http://example.com/folder/vanity1/实际上并不存在。

      问题:

      301是否有不同的方法将虚拟URL重定向到只有一个尾部斜杠的最终目的地,无论访问者在虚荣URL中输入哪种方式 - 有或没有尾部斜杠?

1 个答案:

答案 0 :(得分:3)

这符合Redirect

中的记录
  

匹配的URL路径之外的其他路径信息将附加到目标URL。

这意味着/folder/vanity1仅作为前缀使用,并且请求的URL中的其他斜杠或其他任何内容将附加到目标,例如http://example.com/folder/vanity1/hi/there会产生http://example.com/differentfolder//hi/there

如果您想完全匹配这两个网址/folder/vanity1/folder/vanity1/,则必须使用RedirectMatchmod_rewrite

使用RewriteRule,这看起来像

RewriteRule ^folder/vanity1/?$ /differentfolder/ [R,L]

由于/?,此模式与带或不带尾随斜杠匹配,表示可选的斜杠。其他规则看起来很相似。

如果一切正常,您可以将R替换为R=301permanent redirect)。 从不使用R=301进行测试。

使用RedirectMatch,它看起来几乎相同

RedirectMatch ^/folder/vanity1/?$ /differentfolder/

此处适用相同的免责声明,当它按预期工作时,您可以将状态代码设置为301