【问题标题】:htaccess 301 redirect root only but exclude all files and subfolders with exceptionshtaccess 301 仅重定向根目录,但排除所有文件和子文件夹,但有例外
【发布时间】:2020-10-01 22:30:00
【问题描述】:

我不是.htaccess 代码的程序员,我阅读了其他相关帖子但不理解它们。他们都不做我需要的。

我有一个在 http://example.com/main 上运行的 Wordpress 网站,但想将 http://example.com 重定向到 http://otherexample.com/page.php。还需要 http://example.com/anyfile 不被重定向。

【问题讨论】:

    标签: wordpress .htaccess redirect


    【解决方案1】:

    假设example.com 和otherexample.com 指向不同的地方,然后在example.com 的根.htaccess 文件中尝试类似以下内容:

    RedirectMatch 302 ^/$ http://otherexample.com/page.php
    

    更新:我发现secondary.com也被重定向了。

    如果您有多个域指向同一个地方,并且您只想重定向其中一个,那么您需要在重定向之前先使用 mod_rewrite 检查主机名。

    例如,以下内容需要放在.htaccess 文件的顶部在 WordPress 前端控制器之前:

    RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
    RewriteRule ^$ http://otherexample.com/page.php [R=302,L]
    

    请注意,RewriteRule pattern 匹配减去斜杠前缀的 URL 路径,因此是正则表达式 ^$(不同于 RedirectMatch 指令)。

    【讨论】:

    • 经过更仔细的测试,我发现secondary.com也被重定向了。
    • 如果您有多个域,那么您需要使用 mod_rewrite 代替。我已经更新了我的答案。
    • 我不明白为什么 Cond 是 ^ 负数。如果我将 Cond 视为 AND,那么就像 ^$ AND ^(www\.)?example\.com [NC]
    • Cond 不是负数。正则表达式中的^ 是字符串的开始锚点。这确保我们从 Host 标头的 start 开始匹配,并且不会得到部分匹配,这可能会导致误报,具体取决于您拥有的域(但这种方式也更有效)。但除此之外,是的,这是一个 AND。 ^$ 匹配 URL 路径,Cond 匹配主机名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 2018-08-09
    • 1970-01-01
    • 2016-06-27
    • 2012-05-13
    • 2014-12-03
    相关资源
    最近更新 更多