我已经尝试了(可能超过250)不同的重写规则,但没有一个能达到预期的效果。
maindomain.com 规则这是一个带有SSL&amp ;;的wordpress网站应该使用前缀www.
www.
到整个域/文件夹/子文件夹...等(不仅仅是wordpress) EXCEPT 文件夹testfolder
https.
到整个域/文件夹/子文件夹...等(不仅仅是wordpress) EXCEPT 文件夹testfolder
规则,这是在服务器/testfolder/
中托管的自定义网页集
www.
test.otherwebsite.com
https
更改为http
test.otherwebsite.com
如果第一套规则正常工作,我不应该考虑这些规则。
答案 0 :(得分:0)
如果您有权访问主配置文件,则无需使用重写引擎。
(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 :(得分:0)
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]