我有以下Apache重写条件,并且无法弄清楚将其转换为Nginx重写的正确方法。
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5})$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/(site|search|members|P[0-9]{2,8}) [NC]
RewriteRule ^(.*)$ /index.php?/$1 [L]
编辑: 事实证明,页面下的规则是劫持我以前的规则。 有问题的规则就是这个:
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
答案 0 :(得分:1)
您应该将两个REQUEST_URI条件合并为一个正则表达式,并将其用作位置说明符。然后在内部位置检查文件是否存在。
location ~ ^\/(site|search|members|P[0-9]{2,8})(?!(\.[a-zA-Z0-9]{1,5}$)) {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?/$1 break;
}
# here goes something like 'root ..' for getting existent file
}
答案 1 :(得分:0)
这应该可以解决问题。
# nginx configuration
location ~ "(\.[a-zA-Z0-9]{1,5})$" {
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?/$1 break;
}
}
希望这有帮助:)