我在从第三方(vBSEO)创建的.htaccess文件中有以下内容:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/(admincp|modcp|clientscript|cpstyles|images)/
RewriteRule ^(.+)$ vbseo.php [L,QSA]
如果我已经确定第2行的目录不存在,为什么需要第三行(“如果REQUEST不是这个特定的目录”)?不排队两个状态,“如果请求不是目录”?
答案 0 :(得分:3)
第二行确实意味着“请求的文件名不是物理目录”。但是,第三行表示“请求的文件名不包含任何序列/ admincp /或/ modcp / etc”。你看,它是一个正则表达式,因为它不使用锚点^
(表示字符串的开头)或$
(表示字符串的结尾),它匹配任何仅仅的字符串包含这些目录名称。
所以.htaccess说我们应该将任何请求重定向到vbseo.php,如果它不是现有资源,并且请求的文件名不在任何这些目录中。 /admincp/index.html
不会被重定向(假设index.html存在)。请注意,/foo/bar/admincp/baz/qux
也不会被重定向。
答案 1 :(得分:1)
如果请求是现有文件或目录的名称,前两行确保没有请求被重定向到vbseo.php。但是,第三行确保请求不会被重定向,即使它们 not 存在,如果它们包含/(admincp | ...)/。
更重要的是,第三行允许在vbseo重定向之后提供非文件或目录的资源。
RewriteRule ^blogs$ blogorama.php [L]
如果/ blogs /无法通过文件系统访问,例如。