Mod-Rewrite

mod_rewrite 從 http 埠 XXXX 到 https 埠 XXXX

  • September 26, 2017

我無法使用以下規則使 mod_rewrite 工作。

RewriteCond "%{SERVER_NAME}" "home.myhome.net"
RewriteCond "%{SERVER_PORT}" "^4388$"
RewriteRule (.*) https://home.myhome.net:4389%{REQUEST_URI} [QSA,R=301,L]

此規則在我的 http 虛擬主機部分設置。問題是,重定向只在第一次起作用。第二次在 http 埠4388上輸入不同的 URL 時,我被重定向到https://home.myhome.net:438 8 /…

例如:

任何想法如何解決?

我的作業系統詳細資訊:

root@host:~# dpkg -l|grep apache
ii  apache2                                     2.4.18-2ubuntu3.5                            amd64        Apache HTTP Server
ii  apache2-bin                                 2.4.18-2ubuntu3.5                            amd64        Apache HTTP Server (modules and other binary files)
ii  apache2-data                                2.4.18-2ubuntu3.5                            all          Apache HTTP Server (common files)
ii  apache2-utils                               2.4.18-2ubuntu3.5                            amd64        Apache HTTP Server (utility programs for web servers)
ii  python-certbot-apache                       0.17.0-1+ubuntu16.04.1+certbot+1             all          Apache plugin for Certbot
root@host:~# lsb_release -d
Description:    Ubuntu 16.04.3 LTS

那是我的虛擬主機配置,它有所不同,因為我進行了更多測試,但行為相同。我也放棄了測試所有其他重寫規則,結果相同(以及我在評論中所說的,對於我刷新瀏覽器記憶體的每個測試)。

<VirtualHost *:80>
   ServerAdmin webmaster@myhome.net
   DocumentRoot /var/www/html

   <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteCond "%{SERVER_NAME}" "home.myhome.net"
       RewriteCond "%{SERVER_PORT}" "^4388$"
       RewriteRule ^ https://%{SERVER_NAME}:4389%{REQUEST_URI} [noescape,qsappend,redirect=301,last]
   </IfModule>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

哦,我忘了說,這台伺服器位於 NAT 網關後面,它執行從外部埠 4388 到內部主機埠 80 以及外部埠 4389 到內部埠 443 的埠轉發。這就是為什麼我需要檢查埠和主機名僅匹配外部流量。

編輯:好的,我找到了一些東西,但也沒有解決方案:我將第一個和以下瀏覽器請求/響應與瀏覽器開發人員工具-> 網路選項卡進行了比較:

第一個請求給了我“ 301 Moved Permanently ”,但下面的請求給了我一個“ 307 Internal Redirect ”。

所以這似乎是一個伺服器問題。問題只是,如果它是 mod_rewrite 中的錯誤還是我的錯,因為規則不正確。

編輯:我現在也使用來自Ondřej Surý 的 Apache PPA的目前 apache 版本 2.4.27-5.1+ubuntu16.04.1+deb.sury.org+1 進行了測試

問候,托馬斯

好的,經過長時間的搜尋,我終於找到了原因。我在我的 https 網站上設置了 HTTP Strict-Transport-Security (HSTS),這就是為什麼瀏覽器不會再次啟動以在該 url 上打開 http 網站並強制使用 https 協議的原因。

給定的例子都是有效的。

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