我有一个客户端的新网站完成,现在我正在做所有的重定向.htaccess文件。对于下面的代码段中的源URL部分,我有点困惑。 这两条线是一样的吗?这两个重定向在.htaccess和这两个如何编写单个重定向之间有什么区别
Redirect 301 /shop/contact-us http://www.example.com/contact-us/
Redirect 301 /shop/contact-us/ http://www.example.com/contact-us/
我有一个客户端的新网站完成,现在我正在做所有的重定向.htaccess文件。对于下面的代码段中的源URL部分,我有点困惑。 这两条线是一样的吗?这两个重定向在.htaccess和这两个如何编写单个重定向之间有什么区别
Redirect 301 /shop/contact-us http://www.example.com/contact-us/
Redirect 301 /shop/contact-us/ http://www.example.com/contact-us/
如果您想将/shop/contact-us
与若干可选尾随斜杠重定向到http://www.example.com/contact-us
,那么Redirect
指令不是很合适。使用RedirectMatch
指令代替:
RedirectMatch 301 "^/shop/(contact\-us)/?" http://www.example.com/$1/
其中
^
是锚意为 “行首”;/?
匹配零或一个斜线字符;(contact\-us)
是捕获组(由$1
引用)注意,正则表达式唯一前缀相匹配,因为仅使用^
锚。可以使用锚的$
(线结束),以使表达更严格,例如:
RedirectMatch 301 "^/shop/(contact\-us)/*$" http://www.example.com/$1/
其中/*
意味着零条或多个斜线。
那么这个重定向/ shop/contact-us&/ shop/contact-us /还是会重定向/购买/联系我们/ ABC? –
@Keyur,它会重定向这两个。如果你只想要第一个,使用'''锚点,例如'RedirectMatch 301“^/shop /(contact \ -us)/ * $”http:// www.example.com/$ 1 /',其中'/ *表示0或更多斜线 –
好的谢谢@RuslanOsmanov –
您列出的源网址是唯一且不同的,因为其中有一个结尾的斜杠。
实际上订单可以与mod别名有关系。
如果我们有以下几点:
Redirect 302 '/foo/' 'http://example.com/foo.php'
Redirect 302 '/foo' 'http://example.com/bar.php'
还可以访问/foo/
,我们会得到一个临时重定向到http://example.com/foo.php
。 如果我们访问/foo
,我们会暂时重定向到http://example.com/bar.php
。
但如果我们改变这个顺序:
Redirect 302 '/foo' 'http://example.com/bar.php'
Redirect 302 '/foo/' 'http://example.com/foo.php'
还可以访问/foo/
,奇怪的是,第一图案/foo
将匹配,你会在http://example.com/bar.php
结束了!
我倾向于写更具体的(更长的来源网址首先)。
有时我会使用mod别名重定向获得一些非常奇怪的结果。因此,最终使用RedirectMatch编写特定的模式匹配,或者使用mod重写。
你的情况看来,如果你希望两个:
/shop/contact-us
和
/shop/contact-us/
重定向到相同的URL。所以,你可以简单地忽略一个规则,只是使用:
Redirect 301 /shop/contact-us http://www.example.com/contact-us/
但是,也许在历史上已使用这两种模式来访问相同或不同的资源,所以它可能是更好的同时列出(但更改顺序)。
区别显然是斜线。即使路径不同,只有尾部的斜线才会有所不同。但是在两种情况下,指令都以相同的方式应用。 –
@RuslanOsmanov如何将这两个网址重定向到http://www.example.com/contact-us/使用.htaccess中的重定向 –
'RedirectMatch 301“^/shop /(contact-us)/?” HTTP:// www.example.com/$ 1 /'。 '重定向'不是很合适。请更新问题。否则,目前还不清楚你在询问什么。 –