【问题标题】:RewriteRule to handle one domain two folders to two domains no folderRewriteRule 处理一个域两个文件夹到两个域没有文件夹
【发布时间】:2021-10-20 06:00:34
【问题描述】:

我正在尝试创建重写规则来处理一些特定的网站重定向:

我希望 domain1.ca/folder1/xyz 转到 domain2.ca/xyz 和 domain1 .ca/folder2/xyz 转到域3.ca/xyz

目前我的尝试如下:

RewriteCond %{HTTP_HOST} ^domain1.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain1.ca$
RewriteRule ^(\/folder1\/)(.*)$ "https://domain2.ca/$1" [R=301,L]

RewriteCond %{HTTP_HOST} ^domain1.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain1.ca$
RewriteRule ^(\/folder2\/)(.*)$ "https://domain3.ca/$1" [R=301,L]

任何帮助将不胜感激 :) 谢谢。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    您现有规则的几个问题:

    • .htaccess 中,与RewriteRule 匹配的URL 路径模式 不以斜杠开头。因此,URL 路径以 folder1/xyz 开头,而不是 /folder1/xyz

    • 您不必要地在第一个带括号的子模式中捕获“folder1”,并在 substitution 字符串中使用它(即$1)。您应该使用$2,或者不要捕获第一个路径段。

    指令也可以稍微整理一下(例如,不需要在正则表达式中使用反斜杠转义斜杠,并且可以组合条件)。

    请尝试以下方法:

    RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.ca [NC]
    RewriteRule ^folder1/(.*) https://domain2.ca/$1 [R=301,L]
    
    RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.ca [NC]
    RewriteRule ^folder2/(.*) https://domain3.ca/$1 [R=301,L]
    

    补充说明:

    • RewriteRule 模式中(.*)$ 之后的字符串结尾锚 ($) 不是必需的,因为正则表达式默认是贪婪的。
    • 如果参数包含空格,则只需将参数用双引号括起来。
    • 我从 CondPattern 的末尾删除了字符串结尾锚 ($) 以匹配以点结尾的完全限定域名。
    • 我在条件中添加了NC 标志。从技术上讲,某些机器人可以发送混合/大写 Host 标头。

    首先使用 302(临时)重定向进行测试以避免潜在的缓存问题。

    【讨论】:

    • 谢谢@MrWhite... 完美运行。我感谢您的补充说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2021-08-14
    • 2019-08-21
    相关资源
    最近更新 更多