包含“PHP”的Nginxredirecturl

最近我改变了我的网站,使用PHP / Apache到Django / Nginx。 我想给一个http响应301,并redirect到我的主页所有包含“.php”的请求。

例:

site.com/?page = show.php&id = 2748

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

“.php”可以在URL中的任何位置。

我试过了:

位置〜.php {重写^ /(。*)http://www.site.com永久; }

但是,当然,只有当.php结束的时候才会起作用。 有人可以给我一个线索吗?

更新:如果我使用这个解决scheme:

if ($request_uri ~* "php") { rewrite ^/(.*) http://www.site.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" 

为什么它会尝试redirect太多次?

更新:我试过了:

如果($ request_uri〜.php ){重写^ / http://www.site.com永久; }

它的工作,但是当URL以“?”开头时 我得到同样的错误。 所以,50%的问题解决了…

解决scheme:if($ request_uri〜。.php ){#return 410; 重写^ http:// $ host? 常驻;

问题在于重写。

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

所以,这里是代码:

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

现在,nginx会在URL中任何地方包含“.php”的所有页面返回4010。 我的django网站现在可以和平生活了;-)

更新:

添加以下以及您现有的条件:

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