如何解释这些htaccess重写规则

我给了一个新的网站设置或重新编写规则。 我从来没有使用过他们,我试图了解我们在这里做什么

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/ ,返回301redirect,并停止处理更多的规则

下一个规则集

 RewriteCond $1 !^(CCSFG|images|fonts|ee-system|themes|robots\.txt|index\.php) [NC] RewriteRule ^(.*)$ /index.php/$1 [L] 

说:如果请求不是以CCSFG,图像或字体或等(不区分大小写)开始,那么重写整个请求以预先添加/index.php/并停止处理更多的规则

我的解释是否正确?

如果是这样,第二个规则集的目的是什么? 为什么我要将/index.php/添加到这些条目中?

是的,几乎完全一样。

第一个RewriteCond %{HTTP_HOST} . 存在以便不redirect循环谁不发送主机头 – 这是validation主机头variables包含至less一个字符。

前置行为的存在是为了强制页面请求被index.php处理,可能是为了漂亮的URL–例外是需要由物理上存在的文件提供的位置。

因此,对于/images/image2.jpg ,它让Apache在该位置处提供文件,但对于/contentpage/1/2/3 /index.php/contentpage/1/2/3 ,它将重写为/index.php/contentpage/1/2/3 ,让PHP应用程序做它的事情。

其实,这在技术上改写为//index.php/contentpage/1/2/3 ; 很显然它有一个改变的基础(从一个htaccess文件),并没有考虑到它的目的地。