解读这条.htaccess线

时间:2017-11-07 22:08:04

标签: php apache .htaccess redirect mod-rewrite

# 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文件的顶部吗?如果我不这样做会怎么样?

1 个答案:

答案 0 :(得分:1)

第二行的正则表达式匹配,如果是字符串:

  • !没有
  • \.一个字面点,后跟
  • [a-z-] a-z, - 范围的多个字符,后跟
  • \.另一个字面点,后跟
  • [a-z]{2,6}来自a-z范围的2到6个字符
  • $在字符串结束之前

括号“(..)”允许捕获匹配的子字符串。 然后可以在以下表达式/替换中使用它。

NC标志将导致匹配执行不区分大小写。

在您的情况下,如果传入的URL

,这将触发重写
  • 不以www.(第1行)
  • 开头
  • 不会以.hostname.tld(第二行)
  • 为结尾

请参阅https://regex101.com/,了解试用正则表达式的好游乐场。