Apache-2.4

將 http 重定向到 https 返回雙斜杠

  • February 14, 2018

我的系統是 Centos 7 和 Apache 2.4.6

我需要使用 Apache httpd.conf 將 http 重定向到 https,我搜尋了數百頁並找到了一些程式碼,但這很好,不是從DigitalOcean硬編碼的,但它在 URL 的末尾返回雙斜杠,這是不同的圖像重定向結果

<VirtualHost IP:80>

  # https/http www -> https non-www

  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

  # http non-www -> https non-www
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

</VirtualHost>

<VirtualHost IP:443>

  # I removed this from 443 and the same result
  # https/http www -> https non-www
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

</VirtualHost>

那是因為你抓住了 (.*) 中的第一個斜線:

重寫規則 ^(.*)$ https://%1/ $1

$$ R=301,L $$

這種正則表達式用於 per-dir 上下文中,其中第一個斜杠未使用且不適用,在虛擬主機上下文中存在第一個斜杠,因此您可以使用 (.*) 擷取並將其添加到結果中。

因此,在虛擬主機上下文中執行此操作的一種最典型和正確的方法是在擷取組之前手動添加斜杠:

RewriteRule ^/(.*) https://%1/$1 [R=301,L]

注意:我刪除了“$”,因為當您擷取所有內容時,沒有必要指定“結束”。

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