簡體   English   中英

mod_rewrite規則強制在主要域上使用www和https,而忽略1個文件夾和1個其他域

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM