dia*_*ich 1 regex apache .htaccess mod-rewrite
我试图更好地理解mod_rewrite并遇到一个特殊的问题,我认为我需要先弄清楚点。
我重写http://www.somesite.tld/a/b/c,以index.php?path=a/b/c使用以下
RewriteRule ^(?!index.php)(.*)$ index.php?path=$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,等效的重写将是
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?path=$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)
RewriteCond没有明确忽略文件或不说“不是index.php”,将无法得到-path = index.php的结果。为什么是这样? ?!和?:语法是什么??当它没有任何前缀时,我不理解的使用。干杯
(?= ...)并且(?! ...)是在Perl的正则表达式和特殊语法PCRE,这是正则表达式库,Apache使用的。它们分别是正向和负向超前断言:如果后面的文本与方括号中的内容匹配或不匹配,则它们与空字符串匹配。
它们是非捕获的,因此它们没有定义任何内容$n(这是毫无意义的,因为它们匹配一个空字符串)。(?: ...)也是非捕获的,用于对子表达式进行分组。
您的第一个规则应该起作用.htaccess(但不能在虚拟主机配置文件中),尽管将其写为
RewriteRule ^(?!index\.php$)(.*)$ index.php?path=$1 [L]
Run Code Online (Sandbox Code Playgroud)
也许另一个规则正在与之交互。您可以检查究竟是被匹配,并改写RewriteLog和RewriteLogLevel。
| 归档时间: |
|
| 查看次数: |
2697 次 |
| 最近记录: |