如何告诉 Nginx 不要重写选定位置的 URL

如何告诉 Nginx 不要重写选定位置的 URL

我正在使用 Nginx 中的干净 URL 实现编写一些 PHP CMS 代码。为了提高代码的安全性,我想/使用以下类型重写根目录中的所有请求:

rewrite ^(.*)$ /index.php?q=$1 last;

使用这种重写后,其余的 php 脚本将无法从用户端访问(只有包含在 php 中时才可以访问,对吗?)。但是,我不想在一个位置重写请求(对于 mi 来说,这对我来说是这样的/static/),因为我将仅从该位置提供静态内容,例如图像和 css。如何使此重写在某些位置不起作用?

答案1

理解并使用该location指令应该可以解决您的问题。当 location 后面仅跟有前缀字符串(即没有诸如“=”或“~*”之类的修饰符)时,将首先匹配最长的前缀字符串。例如:

server {
    server_name example.org;
    root /var/www/site;

    location / {
        # Configuration A
    }

    location /static {
        # Configuration B
    }

在此配置中,URLexample.org/static/foo.gif将与配置 B 匹配,因为前缀字符串/static比 长/。同时,example.org/index.php?q=bar将与配置 A 匹配,因为这是唯一匹配项。

然后,您可以让配置 A 使用 PHP 提供内容,而配置 B 提供静态内容。

另外,我强烈建议您阅读Nginx 陷阱如果您还没有查看,请查看此页面。它解决了一些与您的情况高度相关的问题,例如繁重的重写、安全地使用 fastcgi_pass 等等。

相关内容