Apache-2.4

If else 條件 Apache 301 重定向

  • August 22, 2016

我有多個看起來像這樣的 URL:

  • stage-app-platform-com.something.com
  • stage.something.com
  • stage1.something1.com

我想創建一個 Apache 301 重定向規則,如果 URL 包含模式app-platform應該轉發到 stage1.app.com,並且任何其他訪問伺服器的請求都應該重定向到 stage2.app.com。為此,我編寫了以下重定向規則:

RewriteRule ^stage-app-platform-com$ https://stage1.app.com/ [L,R=301]
RewriteRule ^(.*)$ https://stage2.app.com/ [L,R=301]

現在,規定所有流量命中的第二條規則應重新定向到*https://stage2.app.com/有效,但第一個規則似乎不起作用。如果請求第一個 URL,Apache 將轉發到https://stage2.app.com/>*而不是*<https://stage1.app.com/*

由於我對編寫重寫規則非常陌生,我發現它有點困難。我將不勝感激任何幫助。

試試下面的。但首先明確清除您的瀏覽器記憶體。重定向通常被記憶體。

&lt;if "%{HTTP_HOST} =~ /^stage-app-platform-com\./"&gt;
重定向永久 https://stage1.app.com/
&lt;/如果&gt;
&lt;其他&gt;
重定向永久 https://stage2.app.com/
&lt;/else&gt;

RewriteRule看不到 URL 的主機名部分。您還需要使用RewriteCond類似的東西:

RewriteCond "%{HTTP_HOST}" "^stage-app-platform-com\."
RewriteRule .* https://stage1.app.com/ [L,R=301]
RewriteRule .* https://stage2.app.com/ [L,R=301]

這將導致RewriteRule僅在RewriteCond條件匹配時才應用第一個。如果不是,那麼它應該落到第二個RewriteRule

文件在mod_rewrite這裡:http ://httpd.apache.org/docs/current/mod/mod_rewrite.html

引用自:https://serverfault.com/questions/796253