2017-08-29 256 views
1

我試圖從m.subsub.subdomain.tld重定向到subsub.subdomain.tld?m=true。所以基本上,我想添加一個GET請求。現有的GET應該保持原樣,所以m.subsub.subdomain.tld?abc=defsubsub.subdomain.tld?abc=def&m=true.htaccess:通過獲取請求從子域重定向到域

我試着下面的代碼,但它不工作:

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

我想明白是怎麼ReWriteCondReWriteRule的作品,但我沒有得到這樣的,所以我需要你的幫助。

回答

0
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路徑(.*) - 這是必需的嗎?在你的例子中這不是必需的。您的示例源和目標網址具有空的網址路徑。
  • ?=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] 

現有的獲取應該保持像他們,所以m.subsub.subdomain.tld?abc=defsubsub.subdomain.tld?abc=def&m=true

注意,這將導致查詢字符串相反。即。來自請求的現有查詢字符串將被追加,而不是前綴到新的查詢字符串中。那是問題嗎?即。 ?m=true&abc=def,而不是?abc=def&m=true

這也是一個臨時(302)重定向。只有當你確定它正常工作時(如果這是永久性的),請將其更改爲301(永久)。