我目前有一个重定向,可以将所有HTTP页面重定向到http://www.
和http://
页面的相应HTTPS页面,如下所示:
# redirect all pages to https://www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
# redirect http to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
我还需要为子域http://my.
添加重定向以转到https://my.
如果我在子域的.htaccess文件中放置重定向,则会受到www.htaccess文件的干扰。
我需要做些什么更改才能让以下工作:
http://www.
和http://
个网页重定向到相应的https网页http://my.
个网页重定向到相应的https网页答案 0 :(得分:3)
好的,你的mod_rewrite的问题是重写规则:
RewriteCond %{HTTP_HOST} !^www\. [NC]
将匹配任何不以www。
开头的内容这一行的语法是:
RewriteCond {string to match} {regular expression to match} {other parameters}
在你的情况下,它说:
匹配主机名(%{HTTP_HOST}
)没有(!
)的所有网址(^
)" www。"。 (句点之前的反斜杠是因为句号在正则表达式中具有特殊含义 - 它代表"任何字符")。
最后的[NC]意味着忽略大写。
那么,你的.htaccess的第一部分
# redirect all pages to https://www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
表示:
重写每个主机不以" www。"开头的网址,包括" me。",通过前置" www。"
显然这会改写me.whatever.com到www.me.whatever.com。
修复它需要做的是添加另一个匹配规则以排除该情况。
即:
RewriteCond %{HTTP_HOST} !^me\. [NC]
所以完整的.htaccess应该是:
# redirect all pages to https://www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^me\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
# redirect http to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
所以现在重写条件是: 如果主机名不以www开头。并不是从我开始的,然后是前面的。
这是一个很好的测试人员,您可以使用它来玩不同的解决方案:http://htaccess.madewithlove.be/
要学习如何编写这些文件,首先要学习正则表达式;他们是任何技术专家工具包的重要组成部分!
祝你好运:)