除了 https 重定向之外,如何配置 Apache 以將 root 重定向到 suburi?
我有一個執行大量網路應用程序的 Apache 網路伺服器。我已成功將每個單獨應用程序的傳入 http 流量重定向到 https,但我無法將所有進入根路徑(其中沒有任何內容)的流量路由到特定應用程序。我已經讓它適用於http,但不適用於https。
所以基本上現在以下 URLS 正確重定向:
http://example.com/app1 -> https://example.com/app1 http://example.com/app2 -> https://example.com/app2 等。 http://example.com -> https://example.com/app1
但我不知道如何使這項工作:
https://example.com -> https://example.com/app1
我的 Apache 配置文件包含以下內容:
<VirtualHost xxx.xxx.xxx.xx:80> ServerName example.com RedirectMatch 301 ^/$ /app1/ Redirect permanent / https://example.com/ </VirtualHost>
我嘗試添加 RewriteCond/RewriteRule 對,例如
RewriteEngine On RewriteCond %{HTTPS} on RewriteRule ^/$ https://example.com/app1 [R=301,L]
以及我認為應該工作的許多其他事情,它們要麼似乎什麼都不做,要麼破壞了我配置的其他部分。
萬一這很重要,我的 SSL 證書是多域的,因為我還有其他域指向此伺服器上的應用程序。所有這些都可以通過以下方式完美執行(儘管它們沒有額外的重定向要求):
<VirtualHost xxx.xxx.xxx.xx:80> ServerName example2.com Redirect permanent / https://example2.com/ </VirtualHost>
那麼如何在不破壞其他任何東西的情況下使 https 從 root 重定向到 suburi 呢?
http 和 https 的相同 RewriteRule 應該可以解決問題,如果有其他規則,請將它們放在首位。我更喜歡 mod_rewrite 而不是 mod_alias。
<VirtualHost xxx.xxx.xxx.xx:80> ServerName example.com RewriteEngine On RewriteRule ^/$ https://example.com/app1 [R=301,L] </VirtualHost> <VirtualHost xxx.xxx.xxx.xx:443> ServerName example.com RewriteEngine On RewriteRule ^/$ https://example.com/app1 [R=301,L] </VirtualHost>
Gerard 的回答更喜歡mod_rewrite而不是mod_alias留下了一種錯覺,即使用 mod_alias 無法實現這一點。根據 Apache 的官方文件:
何時不使用 mod_rewrite
當發現需要其他替代方案時,應將mod_rewrite視為最後的手段。在有更簡單的替代方案時使用它會導致配置混亂、脆弱且難以維護。了解其他可用的替代方案是掌握mod_rewrite的非常重要的一步。
簡單重定向
mod_alias提供了
Redirect
andRedirectMatch
指令,它們提供了一種將一個 URL 重定向到另一個 URL 的方法。這種將一個 URL 或一類 URL 簡單地重定向到其他地方,應該使用這些指令而不是RewriteRule
.RedirectMatch
允許您在重定向條件中包含正則表達式,從而提供使用RewriteRule
.您的唯一問題
RedirectMatch 301 ^/$ /app1/
是最後一個參數不是 URL,而是相對引用。
RedirectMatch
指示句法:
RedirectMatch [status] regex URL
使用 mod_alias 的完整配置將是例如:
<VirtualHost *:80> ServerName example.com RedirectMatch 301 ^/$ https://example.com/app1/ Redirect permanent / https://example.com/ </VirtualHost> <VirtualHost *:443> ServerName example.com RedirectMatch 301 ^/$ https://example.com/app1/ </VirtualHost>