Php 为匹配子字符串的非资产重写Apache到Nginx
我有下面的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] 编辑: 原来页面下面的一
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方式一样),