我们最近inheritance了一些代码,并且正在审查其中一个站点的.htaccess文件。 我知道大部分重写规则集的最终结果是什么,我只是不确定一些语法。 背景信息:使用Apache 2.4的CentOS 7,运行Concrete5 CMS。
例1:
RewriteCond %{HTTPS}s ^on(s)| RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
据我所知,%{HTTPS}是mod_rewrite提供的特殊variables之一,可以on或off 。 在之前的规则中,我看到了RewriteCond %{HTTPS} =on这更符合文档中显示的内容。 所以在上面的例子中,我有以下问题:
on或off ,则放置(s)| 在模式是要使它不符合条件,对不对? PIPE是什么? 例2:
#redirect calls to index.php without get parameters to non-www RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{THE_REQUEST} /index\.php\s [NC] RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE]
我不太理解第二个RewriteCond。
例3:
最后,我们有
#Standard C5 pretty urls RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}/index.html !-f RewriteCond %{REQUEST_FILENAME}/index.php !-f RewriteRule . index.php [L]
在RewriteRule中,模式是. 这在正则expression意思是“任何性格”。
请忽略这个答案,这在很多方面都是错误的。
例1:
此规则用于将非HTTP连接转发到HTTPS连接。 所以:
^on用于检查“HTTP是否不活动”。 ^意味着负面的匹配。 %符号的引用指的是RewriteCond正则expression式。 在这种情况下, %1指的是捕获组,因此当HTTP不活动时, %1是s 。 这个RewriteRule写的方式有点RewriteRule复杂了,我想可能有一个更简单的方法来实现它。 但是,它完成了它的devise。
例2:
\s匹配空格。 所以,这个RewriteRule和/index.php匹配,也就是.php后面的空格。 我认为第二个RewriteCond使这个规则根本不起作用,除非网站软件的某些部分产生不正确的URL。 例3:
. 简单地匹配任何string,并且index.php是使用的replace。 这个RewriteRule中的匹配条件不需要更具体,因为任何不存在的URL被发送到index.php 。