# Redirect all users to access the site WITH the 'www.' prefix
RewriteCond %{HTTP_HOST} !^www\. [NC]
**RewriteCond %{HTTP_HOST} !\.([a-z-]+\.[a-z]{2,6})$ [NC]**
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
好的,所以在上面的代码中我认为第1行说“如果URL没有www。”然后第3行说“用www重写URL作为301重定向”,但我认为第二行是考虑子域并排除它们,但是有人能告诉我这个!\.([a-z-]+\.[a-z]{2,6})$
说了什么到底是什么?
另一个问题:如果mod_rewrite
已启用,我还需要将RewriteEngine On
添加到.htaccess
文件的顶部吗?如果我不这样做会怎么样?
答案 0 :(得分:1)
第二行的正则表达式匹配,如果是字符串:
!
没有\.
一个字面点,后跟[a-z-]
a-z, - 范围的多个字符,后跟\.
另一个字面点,后跟[a-z]{2,6}
来自a-z范围的2到6个字符$
在字符串结束之前括号“(..)”允许捕获匹配的子字符串。 然后可以在以下表达式/替换中使用它。
NC
标志将导致匹配执行不区分大小写。
在您的情况下,如果传入的URL
,这将触发重写www.
(第1行).hostname.tld
(第二行)请参阅https://regex101.com/,了解试用正则表达式的好游乐场。