Nginx 重定向 URL 包含“PHP”

Nginx 重定向 URL 包含“PHP”

最近我将使用 PHP/Apache 的网站更改为 Django/Nginx。我想给出 http 响应 301 并将所有在 url 中包含“.php”的请求重定向到我的主页。

例子:

example.com/**?page=show.php&id=2748**

example.com/**index.php?page=show_page.php&id=2748**

“.php” 可以位于 URL 中的任意位置。

我试过:

location ~ \.php {
        rewrite ^/(.*) http://www.example.com permanent;
    }   

但是,当然,只有当最后有 .php 时它才能工作。有人能给我一点提示吗?

更新:如果我使用此解决方案:

            if ($request_uri ~* "php") {
           rewrite ^/(.*) http://www.example.com permanent;
        }   

我在日志中收到以下错误:

[29/Aug/2011:13:30:25 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:26 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:26 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:27 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:27 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:28 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
[29/Aug/2011:13:30:28 -0300] "GET /?page=show_page.php&id=2748 HTTP/1.0" 301 184 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"

为什么它尝试重定向太多次?

更新:

我试过:

  if ($request_uri ~ .*.php.*) {
        rewrite ^/ http://www.example.com permanent;
    }

它能正常工作,但当 URL 以“?”开头时,我得到同样的错误。所以,50% 的问题已经解决了...

解决方案:

        if ($request_uri ~ .*.php.*) {
            #return 410;
        rewrite ^ http://$host? permanent;

答案1

问题出在重写上。

我将重写改为返回代码 410,我想我会这样做而不是返回 301(永久)。

以下是代码:

if ($request_uri ~ .*.php.*) {
        return 410;
}

现在,nginx 将为 URL 中任何位置包含“.php”的所有页面返回 4010。我的 django 网站现在可以安心了 ;-)

答案2

更新:

将以下内容与您现有的情况一起添加:

if ($args ~* "php") {
    rewrite ^/(.*) http://www.site.com permanent;
}

相关内容