Regex 否定正则表达式在重写规则中不起作用
我正试图为mod_重写编写规则。我需要将以“/api/v[0-9.]+/app/[a-z]+/”开头的所有请求重定向到app.php,并为其他请求发送400个错误请求重定向 说: 在mod_中重写!字符可以在正则表达式之前使用 否定它。也就是说,字符串将被视为已匹配 仅当它与表达式的其余部分不匹配时 所以,我试过:Regex 否定正则表达式在重写规则中不起作用,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,我正试图为mod_重写编写规则。我需要将以“/api/v[0-9.]+/app/[a-z]+/”开头的所有请求重定向到app.php,并为其他请求发送400个错误请求重定向 说: 在mod_中重写!字符可以在正则表达式之前使用 否定它。也就是说,字符串将被视为已匹配 仅当它与表达式的其余部分不匹配时 所以,我试过: RewriteEngine on RewriteBase / RewriteRule ^api/v[0-9.]+/app/[a-z]+/ app.php [L] RewriteRul
RewriteEngine on
RewriteBase /
RewriteRule ^api/v[0-9.]+/app/[a-z]+/ app.php [L]
RewriteRule !^api/v[0-9.]+/app/[a-z]+/ - [R=400]
如果我使用这个,每个请求都会收到400个错误请求
我也试过:
RewriteRule ^api/v[0-9.]+/app/[a-z]+/ app.php [S=1]
RewriteRule !^api/v[0-9.]+/app/[a-z]+/ - [R=400]
及
我每次都会收到400个错误的请求
看起来最后一条规则总是有效的。我不明白为什么
我试过这个:
RewriteRule ^api/v[0-9.]+/app/[a-z]+/ app.php [L]
RewriteRule !^a - [R=400]
它工作正常。每一个不是以“a”开头的请求,我都会收到400个错误请求,重定向到app.php也可以。但是如果我在规则中添加了一些东西,它就不再起作用了
RewriteRule ^api/v[0-9.]+/app/[a-z]+/ app.php [L]
RewriteRule !^api - [R=400]
这一个不起作用(每次请求都有400个错误请求)
我不明白~^a和~^api之间有什么区别。您需要排除
app.php
文件,否则您的规则也会将其映射到400
错误
RewriteEngine on
RewriteBase /
RewriteRule ^api/v[0-9.]+/app/[a-z]+/ app.php [L]
RewriteCond %{REQUEST_URI} !app\.php [NC]
RewriteRule !^api/v[0-9.]+/app/[a-z]+/ - [R=400]
您在所有URI上看到
400
bed请求的原因是,您的第一条规则匹配与模式^api/v[0-9.]+/app/[a-z]+/
匹配的所有请求,并将URI重写为app.php
。您的web服务器再次读取htaccess文件,以便为app.php
服务,并且您的第二条规则匹配,app.php
被重写为R=400
谢谢您的回答和解释,现在我明白了它的工作原理。@sab欢迎您!很高兴我能帮上忙,干杯。
RewriteEngine on
RewriteBase /
RewriteRule ^api/v[0-9.]+/app/[a-z]+/ app.php [L]
RewriteCond %{REQUEST_URI} !app\.php [NC]
RewriteRule !^api/v[0-9.]+/app/[a-z]+/ - [R=400]