【问题标题】:redirect from example.com/forum to example.ir/forum从 example.com/forum 重定向到 example.ir/forum
【发布时间】:2016-05-10 16:56:40
【问题描述】:

我要从

重定向

www.example.com/forumexample.com/forum

www.example.ir/forum

使用 htaccess

RewriteEngine On    
RewriteCond %{HTTP_HOST} ^example.ir/forum$ [OR]        
RewriteCond %{HTTP_HOST} ^example.com/forum$ [OR]    
RewriteCond %{HTTP_HOST} ^www.example.com/forum$     
RewriteRule (.*) http://www.example.ir/forum$1 [R=301,L] 

我没有这样做,我总是得到:

www.example.irforum(不带斜线/)是死链接。

【问题讨论】:

    标签: .htaccess redirect mod-rewrite forum


    【解决方案1】:

    您发布的代码不可能重定向到www.example.irforum(没有斜线)。事实上,您发布的代码不会做任何事情(因为没有一个 条件 会匹配)。如果您看到重定向,则可能是以前缓存的(错误)重定向。

    假设 example.comexample.ir 指向同一个地方,然后在您的 .htaccess 文件中尝试以下操作:

    RewriteEngine On    
    RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
    RewriteRule ^forum(.*) http://www.example.ir/forum$1 [R=302,L]
    

    以上规则处理如下:

    1. 请求的 URL 路径(减去目录前缀)是否与 RewriteRule 匹配 模式 ^forum(.*)?如果是,那么继续...
    2. HTTP_HOST 服务器变量是否与 CondPattern 匹配。 IE。 Host 标头是 www.example.com 还是 example.com?如果是,那么继续...
    3. 将请求重定向到http://www.example.ir/forum$1 - 这是RewriteRule 替换$1 指的是在RewriteRule pattern 中捕获的组(第一个带括号的子模式) - 即。任何匹配(.*)

    如果example.comexample.ir 指向不同的服务器,则不需要RewriteCond 指令。

    使用 302(临时)重定向进行测试,直到您确定它工作正常,然后更改为 301(永久)。或者,在禁用浏览器缓存的情况下进行测试。

    HTTP_HOST 变量仅包含 HTTP Host 标头。例如。 example.com。这不包含路径信息。使用RewriteRule 模式 来匹配 URL 路径。

    【讨论】:

    • 哇,它就像一个魅力,非常感谢你顺便说一句,我该如何学习 mod-rewrite 的逻辑?了解您提供的内容?
    • 大量的反复试验、测试和质疑一切! :) Apache docs 在许多方面可能过于简洁,示例很少,但是它们是非常宝贵的参考。复杂的重写通常涉及复杂的正则表达式,Apache 文档根本没有涉及。 regular-expressions.info 是我的正则表达式 goto 资源。 askapache.com 是一个很好的资源,包含大量的代码 sn-ps 和原始示例,但几乎没有解释。我会在我的答案中添加更多解释......
    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多