.htaccess:使用get-request从子域重定向到域

时间:2017-08-29 15:48:46

标签: .htaccess redirect mod-rewrite get subdomain

我尝试从$('#myButton').on('click', function () { //Do stuff in the .js file }); 重定向到m.subsub.subdomain.tld。所以基本上,我想添加一个GET请求。现有的GET应该保持原样,subsub.subdomain.tld?m=truem.subsub.subdomain.tld?abc=def

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

subsub.subdomain.tld?abc=def&m=true

我试图理解RewriteEngine On ReWriteCond %{HTTP_HOST} m.subsub.subdomain.tld ReWriteCond %{REQUEST_URI} ^m/ ReWriteRule ^(.*)$ ?=m=true[L] ReWriteCond是如何工作的,但我没有得到,所以我需要你的帮助。

1 个答案:

答案 0 :(得分:0)

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

这有很多问题:

  • REQUEST_URI包含网址路径(以斜杠开头),因此我不确定您要将哪些内容与^m/匹配?
  • m.subsub.subdomain.tld - RewriteCond指令的第二个参数是正则表达式。点需要反斜杠转义以匹配文字点,否则它匹配任何字符
  • 您正在使用(.*)捕获网址路径 - 这是必需的吗?在您的示例中不需要它。您的示例源和目标网址具有空的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

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

这也是一个临时(302)重定向。只有在您确定它正常工作时才会将其更改为301(永久性)(如果这是永久性的)。