Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为匹配子字符串的非资产重写Apache到Nginx_Php_Apache_.htaccess_Mod Rewrite_Nginx - Fatal编程技术网

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

Php 为匹配子字符串的非资产重写Apache到Nginx,php,apache,.htaccess,mod-rewrite,nginx,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] 编辑: 原来页面下面的一

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

您应该将两个请求URI条件组合成一个regexp,并将其用作位置说明符。然后在该位置内检查文件是否存在

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
}

这应该能奏效

# nginx configuration
location ~ "(\.[a-zA-Z0-9]{1,5})$" {
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?/$1 break;
}
}

希望这有帮助:)

谢谢!这是一个很好的答案,因为它可以区分位置(就像nginx方式一样),