在htaccess规则中使www可选

时间:2016-02-01 06:50:21

标签: .htaccess

我跟随.htaccess将域指向子文件夹。

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} site.com
RewriteCond %{REQUEST_URI} !folder_site/
RewriteRule ^(.*)$ folder_site/$1 [L]

如何更改RewriteCond %{HTTP_HOST} site.com以包含www作为可选匹配。

2 个答案:

答案 0 :(得分:6)

RewriteCond %{HTTP_HOST} ^(?:www\.)?site\.com$

答案 1 :(得分:0)

第一行设置条件:仅当条件为真时,才会处理第二行。条件可以“翻译”为:“如果主机名不以www开头。”。正则表达式!^ www。意思是:

! =不是

^ =开始

。 =。 (反斜杠是转义字符,因为点在正则表达式中具有特殊含义,因此必须进行转义) 因此!^www\.表示“不以www开头。”

最后一行是实际的重写规则:它再次使用正则表达式来匹配某些URL,然后将它们重写为其他内容。第一部分是正则表达式:

^(.*)$

这意味着:什么!你已经知道了^符号。 (。*)位表示零个或多个字符(点表示任何字符,星号表示零或更多)。最终的$意味着'结束'。

然后说了如何重写网址,

例如:

http://www.%{HTTP_HOST}/$1 [R=301,L]

%{HTTP_HOST}将被主机名替换(即anything.com)。

$ 1引用括号中正则表达式中匹配的任何内容,在本例中为所有内容。

[R = 301,L]表示“通知用户代理这是永久重定向(HTTP 301代码),并且不再处理任何重写规则(如果在此之后有任何重写规则)。” p>

如果你不熟悉正则表达式,这可能看起来有点抽象,随时可以询问更多细节。 :)