nginx rewirte在两个不同的文件夹(文件夹+子文件夹不同的rewirte)

时间:2017-08-01 11:00:59

标签: .htaccess nginx url-rewriting

我对nginx重写有不同的问题。

在apache中,我使用root和子目录中的htaccess文件。

在根文件夹中使用:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?req=$1 [QSA,L]
</IfModule>

并在cp的子文件夹中:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ router.php?get=$1 [QSA,L]
</IfModule>

但是当我尝试通过这个配置nginx时:

但是我尝试了:

server {
    listen      xx.xx.xx.xx:80;
    server_name mydomain.net www.mydomain.net;
    root        /home/admin/web/mydomain.net/public_html;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/mydomain.net.log combined;
    access_log  /var/log/nginx/domains/mydomain.net.bytes bytes;
    error_log   /var/log/nginx/domains/mydomain.net.error.log error;

    #first block
    location / {

    if (!-e $request_filename){
        rewrite ^(.+)$ /index.php?req=$1 last;
        }

    }
    #second block    
    location /cp {

    if (!-e $request_filename){
        rewrite ^(.+)$ /router.php?get=$1 last;
        }

    }
}

但是当我尝试下载强制php。

这个问题看起来不像其他问题我搜索了很多关于这个的问题我无法找到答案

当我在root上删除第二个块重写工作时。

1 个答案:

答案 0 :(得分:0)

对于位置问题,您应该检查this answer。对于处理 php 你应该配置php-fpm并添加到nginx配置php-processing位置:

location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME /var/nginx/$fastcgi_script_name;
        fastcgi_index index.php;
    }