nginx重写Drupal和坏URL

时间:2013-03-26 10:24:14

标签: drupal nginx rewrite

这是Drupal的nginx配置片段:

server {
    listen       80;
    server_name  _;
    root /home/testing/public_html/staging;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location = /backup {
        deny all;
    }

    location ~* \.(txt|log)$ {
        deny all;
    }

    location / {
        try_files $uri @rewrite;
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/tmp/php-fpm.sock;
    }

    location ~ ^/sites/.*/files/imagecache/ {
        try_files $uri @rewrite;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        rewrite ^/staging/(.*)$ /$1;
        expires max;
        log_not_found off;
    }

}

这适用于像这些

这样的网址
http://www.testing.com/this/page
http://www.testing.com/that/page

直到处理包含“/ staging /”的硬编码URL。例如:

http://www.testing.com/staging/this/page

这会显示“找不到页面”页面。我尝试添加这一行:

location /staging {
    rewrite ^/staging/(.*)$ /index.php?q=$1;
}

但这似乎根本不起作用。如何使用“/ staging /”捕获所有URL并正确重写它们以便我没有收到“找不到页面”错误?

2 个答案:

答案 0 :(得分:1)

您需要添加last才能触发另一轮位置匹配。没有它,您的请求将被困在/staging位置块中。

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

答案 1 :(得分:0)

尝试使用此网站检查您的网站配置。

Here is an example of working Nginx configuration 如果它不起作用,请发布您的错误日志。