如何解释这些 htaccess 重写规则

如何解释这些 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/,返回 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 文件开始),并且它没有将其考虑在内作为其目的地。

相关内容