RewriteCond%{SERVER_NAME}语法

时间:2017-04-23 16:28:59

标签: apache .htaccess ssl mod-rewrite

我试图理解以下语法(参见下面的用法上下文):

RewriteCond %{SERVER_NAME} ^example\.com$

我的.htaccess文件中有上述内容(使用真实域名代替示例)。我想强迫它成为www.example.com。

该网站具有SSL,并且GoDaddy的SSL安装过程添加了以下SSL编码。因此,我尝试使用此编码,并使用SSL更改为强制使用www。

# BEGIN GD-SSL
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_USER_AGENT} ^(.+)$
RewriteCond %{SERVER_NAME} ^example\.com$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Header add Strict-Transport-Security "max-age=300"
</IfModule>
# END GD-SSL

我尝试添加mod重写规则来强制使用www并且它们无法正常工作。我认为问题在于RewriteCond%{SERVER_NAME} ^ example.com $ 这不是解决“www”。我以为我可能需要添加www。但是,我不确定这是否正确 这是改变ssl以强制URL中的WWW的解决方案吗?或者我是否需要完全做其他事情?

 RewriteCond %{SERVER_NAME} ^www\.^example\.com$

非常感谢任何帮助。谢谢。

贝克

1 个答案:

答案 0 :(得分:2)

要在一行中与 www 非www 主机匹配,您可以使用以下正则表达式模式:

^(www\.)?example\.com$

这符合 www.example.com example.com

要强制使用ssl www,您可以使用:

RewriteEngine on

RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule (.*) https://www.example.com/$1 [L,R,NE]