我有许多网址,可以输入或不输入斜杠。它们被用作虚荣网址。
.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错误。
我尝试过:
# 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。
Redirect 301 /folder/vanity1/ http://example.com/differentfolder/
如果用户键入尾部斜杠,这样可以正常工作,但是如果他们不使用斜杠,则不会重定向和404s,因为URL http://example.com/folder/vanity1/
实际上并不存在。
问题:
301是否有不同的方法将虚拟URL重定向到只有一个尾部斜杠的最终目的地,无论访问者在虚荣URL中输入哪种方式 - 有或没有尾部斜杠?
答案 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/
,则必须使用RedirectMatch
或mod_rewrite
使用RewriteRule
,这看起来像
RewriteRule ^folder/vanity1/?$ /differentfolder/ [R,L]
由于/?
,此模式与带或不带尾随斜杠匹配,表示可选的斜杠。其他规则看起来很相似。
如果一切正常,您可以将R
替换为R=301
(permanent redirect)。 从不使用R=301
进行测试。
使用RedirectMatch
,它看起来几乎相同
RedirectMatch ^/folder/vanity1/?$ /differentfolder/
此处适用相同的免责声明,当它按预期工作时,您可以将状态代码设置为301
。