Apache-2.2
apache2重寫規則:從URL中刪除任何路徑
我對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 告訴我“頁面沒有正確重定向”。
我用重寫規則做了很多其他嘗試,但沒有運氣。
我只實現了使用RedirectMatch將https://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
.