我收到了一套或重写的用于新网站的规则。我以前从未使用过它们,我正在努力理解我们在这里做什么
RewriteEngine on
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.myco\.com
RewriteRule (.*) http://www.myco.com/$1 [R=301,L]
RewriteCond $1 !^(CCSFG|images|fonts|themes|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
如果我理解正确的话,第一条规则
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.myco\.com
RewriteRule (.*) http://www.myco.com/$1 [R=301,L]
说:
如果 HTTP_HOST 是任何内容,并且
如果 HTTP_HOST 不以 www.myco.com 开头
,则
重写任何页面请求以http://www.myco.com/,返回 301 重定向并停止处理更多规则
下一套规则
RewriteCond $1 !^(CCSFG|images|fonts|ee-system|themes|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
说:如果请求不是以 CCSFG、图像或字体等开头(不区分大小写),则重写整个请求以添加 /index.php/ 并停止处理更多规则
我的解释正确吗?
如果是的话,第二条规则集的目的是什么?为什么我要在这些条目前面添加 /index.php/?
答案1
是的,几乎完全正确。
第一个RewriteCond %{HTTP_HOST} .
存在是为了不重定向循环那些没有发送主机头的人——它验证主机头变量至少包含一个字符。
前置行为的存在是为了强制通过 来处理页面请求index.php
,可能适用于漂亮的 URL - 例外情况是对于需要由物理存在的文件提供服务的位置。
因此,对于/images/image2.jpg
,它让 Apache 在该位置提供文件,但对于/contentpage/1/2/3
它重写为/index.php/contentpage/1/2/3
,让 PHP 应用程序执行其操作。
实际上,从技术上讲它是重写//index.php/contentpage/1/2/3
;很明显它有一个改变的基础(从 htaccess 文件开始),并且它没有将其考虑在内作为其目的地。