【问题标题】:Redirect vs RedirectMatch重定向与重定向匹配
【发布时间】:2017-01-23 14:26:00
【问题描述】:

我是这个社区的新手,虽然听说过很多。所以,我今天来这里是为了解决我关于重定向 301 和重定向匹配 301 的查询之一。

我尝试使用类似 Redirect 301 的方式重定向 404 页面

Redirect 301 /part1-url http://domain.com/part1-url/part2-url/part3-url.html

这条规则就像一场噩梦,之后我的目标 URL 开始出现异常行为,并且重复的 /part2-url/part3-url.html 字符串被附加到我的目标 URL 中,它变成了类似 -

http:// domain.com/part1-url/part2-url/part3-url.html/part2-url/part3-url.html/part2-url/part3-url.html/part2-url/part3-url.html/part2-url/part3-url.html/part2-url&id=part3-url.html&var=part2-url&var2=part3-url

然后我使用 RedirectMatch 如下:

RedirectMatch 301 ^/part1-url$ http:// domain.com/part1-url/part2-url/part3-url.html

它开始正常工作。

我无法理解为什么会发生这种情况以及第二个是如何工作的。

非常感谢您的帮助。

【问题讨论】:

标签: php apache .htaccess url-redirection http-redirect


【解决方案1】:

Redirect应该重定向所有以字符串开头的 URL。由于您重定向到的 URL 以该字符串开头,因此您自然会立即再次重定向。

RedirectMatch 重定向与正则表达式匹配的 URL。您使用 $ 明确匹配 URL 的结尾作为其中的一部分。这意味着“开始”是不够的。

【讨论】:

【解决方案2】:

取自 Apache。

重定向:

重定向指令通过询问 客户端重新获取新位置的资源。

旧的 URL 路径是一个区分大小写(% 解码)的路径,以 削减。不允许使用相对路径。

新的 URL 可以是一个以方案开头的绝对 URL,也可以是 主机名,或以斜杠开头的 URL 路径。在后一种情况下 将添加当前服务器的方案和主机名。

那么任何以 URL-path 开头的请求都会返回一个重定向 在目标 URL 的位置向客户端发出请求。额外的 匹配的 URL 路径之外的路径信息将附加到 目标网址。

来源:Apache Redirect

重定向匹配

此指令等效于 Redirect,但使用正则表达式,而不是简单的前缀匹配。提供的正则表达式与 URL 路径匹配,如果匹配,服务器会将任何带括号的匹配替换为给定的字符串并将其用作文件名。

来源:Apache RedirectMatch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2016-03-25
    相关资源
    最近更新 更多