Apache到Nginx重写匹配子字符串的非资产

时间:2015-01-21 14:53:35

标签: php apache .htaccess mod-rewrite nginx

我有以下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;
}

2 个答案:

答案 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;
}
}

希望这有帮助:)