最近我改变了我的网站,使用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; }