Nginx禁用特定路径/ url的url重写

时间:2016-07-23 16:10:33

标签: mod-rewrite nginx url-rewriting

我为url rewrite提供了以下nginx配置

location / { ##merge
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

location /devtools/phpmyadmin/ { ##merge
    root /var/www/domain.tld/web;

    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/lib/php5-fpm/web2.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
    }
}
/var/www/domain.tld/web/目录中的

有一个/api/目录,我想要禁用url重写。因此,如果我想通过index.phphttp://domain.tld/api/index.php/function/method

来访问网址

如何修改nginx配置文件?

修改

我尝试以下重写,但没有工作:

location = /api {
    rewrite ^ /api/index.php;
} 

1 个答案:

答案 0 :(得分:1)

我承认我不理解您的配置文件。通常,您要定义root要由所有(或大多数)location块继承。通常是一个单独的location ~ \.php$块,用于通过FastCGI处理卸载.php脚本到PHP处理器。

暂时忽略您的location /devtools/phpmyadmin/阻止,典型的实现将如下所示:

root /var/www/domain.tld/web;

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ~ \.php$ {
    try_files $uri =404;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/lib/php5-fpm/web2.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
}

nginx指令为documented here

如果您希望以/api开头的URI使用不同的控制器,您可以添加:

location /api {
    try_files $uri $uri/ /api/index.php;
}

我无法看到location /devtools/phpmyadmin/块的用途,因为它似乎没有添加更多功能。