Mod rewrite 如何解释以下mod_重写条件?
我有以下重写条件Mod rewrite 如何解释以下mod_重写条件?,mod-rewrite,Mod Rewrite,我有以下重写条件 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) 我已经阅读了Apache mod_重写手册,但是我很难解释上面的内容 我知道条件RewriteCond%{REQUEST\u FILENAME}-f表示请求的文件名是否丢失 条件RewriteCond%{REQU
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
我已经阅读了Apache mod_重写手册,但是我很难解释上面的内容
RewriteCond%{REQUEST\u FILENAME}-f
表示请求的文件名是否丢失RewriteCond%{REQUEST\u FILENAME}-d
表示请求的目录是否丢失RewriteCond%{REQUEST\u URI}.*\。(ico | gif | jpg | jpeg | png | js | css)
RewriteRule^([^?]*)index.php?\u route\uu=$1[L,QSA]
因为我还不知道第3点指的是什么,如果第1点的计算结果为真,即请求文件丢失,第2点,即请求目录丢失,那么请执行RewriteRule^([^?]*)index.php?\u route=$1[L,QSA]
编辑
经过进一步的研究,似乎RewriteCond%{REQUEST\u FILENAME}-f
和重写cond%{REQUEST_FILENAME}-当文件或目录中的任何东西都没有,而不是它们丢失。 < P>最后一行是说:“所请求的URI不以列出的后缀中的一个结尾。”(严格地说,正如KingCrunch指出的,它检查是否有一个后缀在字符串中,无论是在结尾还是在中间)。
如果条件为真,则应用规则以下条件;条件前面的规则是独立的,与条件没有关联
如果条件1、条件2和条件3的计算结果均为true,则将执行以下规则,这是正确的
要分解最后一个正则表达式,请执行以下操作:
表示不匹配,即,如果请求URI与表达式不匹配
*
表示任何字符零次或多次
\.
表示句点(或句号)——这是用反斜杠转义的,因为否则
表示任何字符
(ico | gif | jpg | jpg | png | js | css)
指由垂直条分隔的字符串之一,即“ico
或gif
或jpg
等。”
如果编写的正则表达式以$
(字符串结束标记)结尾,则后缀后不能有字符;如现在所写,任何字符都可以跟在后面
因此,RewriteCond检查请求URI是否与某些字符不匹配,后跟句点,后跟列出的文件类型后缀之一。如果没有,则该条件的计算结果为true。最后一个条件表示“当请求\u URI
不包含[1]个'ico'、'gif'、'jpg'(等等)时”。当所有三条规则的计算结果均为true
时,将应用(未显示)RewriteRule
[1] 这是一种。。。不完整,因为它应该说“不以结束”,但它不是。但这是另一点:)谢谢KingCrunch。你说应该说“ends in”是什么意思?
我还认为不需要用“\”转义元字符,例如
在示例*\.
中“它应该结束”(事实上“不应该结束”。首先错过了!
)),因为当前条件也匹配,例如my.jpg.php
,可能期望/想要什么,也可能不期望/想要什么。正则表达式中的
表示“任何字符”,因此如果你想要一个文本
,它当然必须被转义。我没有完全理解你所说的的意思,它检查字符串中是否有一个后缀,不管是在末尾还是中间。
你介意详细说明一下吗?@PeanutsMonkey编辑。我希望这个解释是有道理的。不幸的是,我不知道任何好的正则表达式教程的链接,但是如果你在互联网上搜索的话,那里有很多。事实上,经常有大量的过剩。这非常有帮助。关于指令%{REQUEST\u FILENAME}
如何工作,我仍然感到困惑。例如,如果我有URIwww.domain.com/directory1/filename1.whatever
它在验证什么?@PeanutsMonkey在这种情况下,%{REQUEST\u FILENAME}
正在验证/directory1/filename1.whatever
。