mod_alias 重定向添加两个尾部斜杠
mod_alias redirects adding two trailing slashes
我有许多 URL 可以输入或不带尾部斜线。它们被用作虚荣 URLs.
.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,例如 http://example.com/differentfolder//
,这会引发 404 错误。
我试过了:
- 从 .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 Header 检查以确保我没有看到缓存的规则。还是一样,如果你输入一个没有尾部斜杠的虚荣 URL 它会起作用;如果你用一个尾部斜杠输入它,它会重定向到两个尾部斜杠,这会导致 404.
- 在我的规则中添加尾部斜线:
Redirect 301 /folder/vanity1/ http://example.com/differentfolder/
如果用户键入尾部斜杠,这会正常工作,但如果他们不输入斜杠,它不会重定向和 404,因为 URL http://example.com/folder/vanity1/
实际上并不存在。
问题:
是否有不同的方式将虚荣心 URL 重定向到只有一个尾部斜杠的最终目的地,无论访问者以何种方式输入虚荣心 URL - 有或没有尾部斜杠?
如 Redirect
、
中所述
Additional path information beyond the matched URL-path will be appended to the target URL.
这意味着 /folder/vanity1
仅用作前缀,并且请求的 URL 中的附加斜线或任何其他内容将附加到目标,例如http://example.com/folder/vanity1/hi/there
会导致 http://example.com/differentfolder//hi/there
如果要精确匹配这两个 URL,/folder/vanity1
和 /folder/vanity1/
,您必须使用 RedirectMatch
or mod_rewrite
使用 RewriteRule
看起来像
RewriteRule ^folder/vanity1/?$ /differentfolder/ [R,L]
由于 /?
,此模式匹配带或不带尾部斜线,表示可选斜线。其他规则看起来类似。
当一切正常时,您可以将 R
替换为 R=301
(permanent redirect). Never test with R=301
.
和RedirectMatch
,看起来几乎一样
RedirectMatch ^/folder/vanity1/?$ /differentfolder/
同样的免责声明适用于此,当它按预期工作时,您可以将状态代码设置为 301
。
我有许多 URL 可以输入或不带尾部斜线。它们被用作虚荣 URLs.
.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,例如 http://example.com/differentfolder//
,这会引发 404 错误。
我试过了:
- 从 .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 Header 检查以确保我没有看到缓存的规则。还是一样,如果你输入一个没有尾部斜杠的虚荣 URL 它会起作用;如果你用一个尾部斜杠输入它,它会重定向到两个尾部斜杠,这会导致 404.
- 在我的规则中添加尾部斜线:
Redirect 301 /folder/vanity1/ http://example.com/differentfolder/
如果用户键入尾部斜杠,这会正常工作,但如果他们不输入斜杠,它不会重定向和 404,因为 URL http://example.com/folder/vanity1/
实际上并不存在。
问题:
是否有不同的方式将虚荣心 URL 重定向到只有一个尾部斜杠的最终目的地,无论访问者以何种方式输入虚荣心 URL - 有或没有尾部斜杠?
如 Redirect
、
Additional path information beyond the matched URL-path will be appended to the target URL.
这意味着 /folder/vanity1
仅用作前缀,并且请求的 URL 中的附加斜线或任何其他内容将附加到目标,例如http://example.com/folder/vanity1/hi/there
会导致 http://example.com/differentfolder//hi/there
如果要精确匹配这两个 URL,/folder/vanity1
和 /folder/vanity1/
,您必须使用 RedirectMatch
or mod_rewrite
使用 RewriteRule
看起来像
RewriteRule ^folder/vanity1/?$ /differentfolder/ [R,L]
由于 /?
,此模式匹配带或不带尾部斜线,表示可选斜线。其他规则看起来类似。
当一切正常时,您可以将 R
替换为 R=301
(permanent redirect). Never test with R=301
.
和RedirectMatch
,看起来几乎一样
RedirectMatch ^/folder/vanity1/?$ /differentfolder/
同样的免责声明适用于此,当它按预期工作时,您可以将状态代码设置为 301
。