Apache-2.2

apache2重寫規則:從URL中刪除任何路徑

  • May 11, 2016

我對Apache上的 Rewrite Rule 感到瘋狂。

基本上我想要實現的是重寫任何網址,如:

http[s]://www.example.com/something

https://www.example.com

我在 apache 上有一個 VHost,如下所示:

<VirtualHost *:80>
ServerName example.com
ServerAlias example
DocumentRoot /var/www/html/example_courtesy
ServerAdmin webmaster@example.com

RedirectMatch 404 /\.git
RedirectMatch 404 /\.svn
<Directory />
   Options FollowSymLinks
   AllowOverride None
</Directory>
<Directory /var/www/html/example_courtesy>
   Options Indexes FollowSymLinks MultiViews
   AllowOverride None
   Require all granted
   DirectoryIndex index.php indice.htm
</Directory>

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]


</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias example
DocumentRoot /var/www/html/example_courtesy
ServerAdmin webmaster@example.com

RedirectMatch 404 /\.git
RedirectMatch 404 /\.svn

$$ … $$ 我嘗試刪除

$$ L $$從第一條規則開始,並在 *:443 VirtualHost 中添加如下重寫規則:

RewriteEngine on
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^.*$ https://%{SERVER_NAME} [L,R]

我收到的是一個重寫循環,Firefox 告訴我“頁面沒有正確重定向”。

我用重寫規則做了很多其他嘗試,但沒有運氣。

我只實現了使用RedirectMatchhttps://www.example.com/specific-path等特定 URL 重寫為https://www.example.com,但這不是我絕對想要的。

有什麼建議麼?

我在這裡搜尋了一個類似的問題,但沒有找到解決我的具體問題的方法。

您的 *.443 部分的 RewriteCond 有一個明顯的問題。HTTPS(通常)在埠 443 上執行(如 VirtualHost 配置所示),但您的重寫條件顯示“如果伺服器埠不是 80,則重定向到 https://…”。

因此,點擊埠 443,請求內容,被告知轉到 443,因為您不在 80 上。這是一個循環。 RewriteCond %{SERVER_PORT} !^443$應該管用。

就個人而言,我寧願使用RewriteCond %{HTTPS} !=on.

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