Mod-Rewrite
使用 301 apache 從 https://domain.tld 多次重定向到 https://domain.tld/subdir/
我有 Apache2 的目前設置,讓我們加密移動
http://domain.tld => https://domain.tld http://www.domain.tld => https://www.domain.tld
它的工作完美,
現在我想將我所有的域名訪問移動到一個子目錄
http://domain.tld => https://domain.tld/subdir ( Done! its working )
但是當我嘗試將 https 域名訪問重定向到子目錄時,我得到了多個重定向。
https://domain.tld => https://domain.tld/subdir ( Endless redirect to https://domain.tld/subdir/subdir/subdir/ and so on )
000-default-le-ssl.conf
<IfModule mod_ssl.c> <VirtualHost domain.tld:443> ServerName domain.tld ServerAlias www.domain.tld DocumentRoot /var/www/domain.tld/html Redirect permanent / https://domain.tld/abc SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/chain.pem </VirtualHost> </IfModule>
000-default.conf
<VirtualHost domain.tld:80> ServerName domain.tld ServerAlias www.domain.tld DocumentRoot /var/www/domain.tld/html # This works like a charm !( DONE! ) Redirect 301 / https://domain.tld/roll-out/ # RewriteEngine on # RewriteCond %{SERVER_NAME} =domain.tld [OR] # RewriteCond %{SERVER_NAME} =www.domain.tld # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>
我已經評論了最後 3 行,請幫助我理解為什麼會發生這種情況以及解決方案是什麼。
非常感謝!
<VirtualHost example.tld:443> ServerName example.tld Redirect permanent / https://example.tld/abc
https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect :
然後任何以 URL-path開頭的請求都會在目標 URL 的位置向客戶端返回一個重定向請求。匹配的 URL 路徑之外的其他路徑資訊將附加到目標 URL。
通過使用“
/
”作為 URL 路徑,“/abc
”目標 URL /abc 也將被匹配並被重定向到/abc/abc
.您可能想要的只是匹配裸域並將其重定向到 /abc,對嗎?
使用 a
RedirectMatch
代替:RedirectMatch permanent ^/$ https://domain.tld/abc