![](/img/trans.png)
[英]Force https://www. for Codeigniter in htaccess with mod_rewrite
[英]mod_rewrite rules to force www and https over main domain, ignoring 1 folder and 1 other domain
我嘗試了很多 (可能超過250個)不同的重寫規則,但沒有一個具有預期的效果。
maindomain.com的 規則 (是具有SSL的wordpress網站),應以www.
開頭 www.
www.
到整個域/文件夾/子文件夾...等等(不僅僅是wordpress), 除了文件夾testfolder
https.
到整個域/文件夾/子文件夾...等等(不僅僅是wordpress), 除了文件夾testfolder
test.otherwebsite.com的 規則 ,這是服務器上/testfolder/
托管的一組自定義頁面
www.
來自域test.otherwebsite.com
test.otherwebsite.com
檢查並強制將https
更改為http
我認為,如果第一組規則正確運行,則不需要這些規則。
如果您可以訪問主配置文件,則無需使用重寫引擎。
(1)將非www重定向到www。 一個更簡單的解決方案是使用VirtualHost指令而不是重寫引擎。
<VirtualHost *:80>
ServerName maindomain.com
Redirect permanent / http://www.maindomain.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.maindomain.com
# ... Your www served here
</VirtualHost>
對於https,您只需復制它們並將端口替換為443。
(2)在單獨的VirtualHost指令中服務/testfolder
<VirtualHost *:80>
ServerName test.otherwebsite.com
# ... anything else
</VirtualHost>
對於https,將端口更改為443。
需要注意的是那些不會使例外/testfolder
如果從訪問www.maindomain.com/testfolder
。
一種解決方案是移動testfolder
通過服務目錄外www.maindomain.com
。 例如
/var/www/maindomain <--- directory for www.maindomain.com
/var/www/testfolder <--- directory for test.otherwebsite.com
有一個<DirectoryMatch>
指令可以防止該錯誤,如此處https://stackoverflow.com/a/214908/779320所述 。 但恐怕它在全球范圍內適用,因此無法在任何VirtualHost中提供。 但是您仍然可以進行測試。
1)您可以在DOCUMENT_ROOT/.htaccess
文件中使用以下代碼:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule !^testfolder/ https://www.maindomain.com%{REQUEST_URI} [NE,NC,R=301,L]
2)然后,您可以在/testfolder/.htaccess
文件中使用以下代碼:
RewriteEngine On
RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ http://test.otherwebsite.com%{REQUEST_URI} [NE,R=301,L]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.