【问题标题】:.htaccess: Redirect from subdomain to domain with get-request.htaccess:使用 get-request 从子域重定向到域
【发布时间】:2018-02-07 03:56:13
【问题描述】:

我正在尝试从 m.subsub.subdomain.tld 重定向到 subsub.subdomain.tld?m=true。所以基本上,我想添加一个 GET 请求。现有的 GET 应该保持原样,所以 m.subsub.subdomain.tld?abc=defsubsub.subdomain.tld?abc=def&m=true

我尝试了以下代码,但它不起作用:

RewriteEngine On
ReWriteCond %{HTTP_HOST} m.subsub.subdomain.tld
ReWriteCond %{REQUEST_URI} ^m/
ReWriteRule ^(.*)$ ?=m=true[L]

我试图了解 ReWriteCondReWriteRule 是如何工作的,但我没有明白,所以我需要你的帮助。

【问题讨论】:

    标签: .htaccess redirect mod-rewrite get subdomain


    【解决方案1】:
    ReWriteCond %{HTTP_HOST} m.subsub.subdomain.tld
    ReWriteCond %{REQUEST_URI} ^m/
    ReWriteRule ^(.*)$ ?=m=true[L]
    

    这有很多问题:

    • REQUEST_URI 包含 URL 路径(以斜杠开头),所以我不确定您要与 ^m/ 匹配什么?
    • m.subsub.subdomain.tld - RewriteCond 指令的第二个参数是一个正则表达式。为了匹配文字点,点需要进行反斜杠转义,否则它匹配任何字符
    • 您正在使用(.*) 捕获 URL 路径 - 这是必需的吗?您的示例中不需要它。您的示例源 URL 和目标 URL 的 URL 路径为空。
    • ?=m=true[L] - 你有一个错误的= 之前 m。您在 RewriteRule 标志 ([L]) 之前缺少 空格 分隔符 - 这将被视为 替换 的一部分。
    • 由于您没有指定(有效)R 标志或方案+主机名,这将导致内部重写,而不是重定向。
    • 如果你想重定向到不同的主机,你需要在替换中指定这个。
    • 除非您明确包含 QSA(查询字符串附加)标志,否则原始查询字符串将被丢弃。
    • ReWriteCondReWriteRule 应该分别写成 RewriteCondRewriteRule。虽然这只是惯例,但这并不是错误。

    请尝试以下方法:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^m\.subsub\.subdomain\.tld [NC]
    RewriteRule ^ http://subsub.subdomain.tld?m=true [R=302,QSA,L]
    

    现有的 GET 应该保持原样,所以 m.subsub.subdomain.tld?abc=defsubsub.subdomain.tld?abc=def&m=true

    请注意,这将导致查询字符串反过来。 IE。请求中的现有查询字符串将被附加,而不是作为新查询字符串的前缀。那是问题吗? IE。 ?m=true&abc=def,不是?abc=def&m=true

    这也是一个临时 (302) 重定向。仅当您确定它工作正常时才将其更改为 301(永久)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-29
      • 2010-11-22
      • 2023-03-17
      • 1970-01-01
      • 2014-08-19
      • 2023-03-09
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多