1
我目前被mod_rewrite卡住了無限循環問題。Apache mod_rewrite - 基於%{HTTP_HOST}重寫爲文件夾名稱 - 無限循環
我想要的(規則,以便適用):使該文件夾名爲%中的文件{HTTP_HOST}(如果存在的話)用於
- stript WWW(重定向)
- 重寫請求
- 如果該文件夾不存在,則重定向到使用domain.tld
實例:
- www.subdomain.domain.tld =>重定向到subdomain.domain.tld
- subdomain.domain.tld =>名爲subdomain.domain.tld文件夾內的文件的負載(和傳遞請求的其餘部分)
- 未知subdomain.domain.tld =>重定向到使用domain.tld
我得到了什麼至今:
RewriteEngine On
# Store protocol (HTTP or HTTPS) as ENV variable
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=proto:http]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=proto:https]
# Stript www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule^%{ENV:proto}://%1%{REQUEST_URI} [L,NC,QSA,R=301]
# Directory exists => rewrite
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST} [NC]
RewriteCond %{HTTP_HOST} -d
RewriteRule^%{HTTP_HOST}%{REQUEST_URI} [L,NC,QSA]
# Directory doesn't exist => redirect
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST} [NC]
RewriteCond %{HTTP_HOST} !-d
RewriteRule^%{ENV:proto}://domain.tld%{REQUEST_URI} [L,NC,QSA,R]
我知道這一切都可以用虛擬主機來實現。不幸的是,我已經在一個共享的虛擬主機上了,我只能使用.htaccess,所以我有點不得不這樣做。
我很感謝任何幫助或想法讓我走向正確的方向。
你在哪裏找的目錄?另外,如果您的所有子域都支持HTTPS,請始終將用戶重定向到SSL連接。 – hjpotter92
這些目錄與.htaccess位於同一文件夾中。協議的保存更像是一種噱頭,因爲它在開發環境中不受支持。如果可能的話,你總是使用HTTPS是絕對正確的,最終版本中就是這種情況。 –
什麼是apache版本? –