最近我将使用 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**
Run Code Online (Sandbox Code Playgroud)
“.php”可以在 URL 中的任何位置。
我试过:
location ~ \.php {
rewrite ^/(.*) http://www.example.com permanent;
}
Run Code Online (Sandbox Code Playgroud)
但是,当然,它只在最后有 .php 时才有效。有人可以给我一个线索吗?
更新:如果我使用这个解决方案:
if ($request_uri ~* "php") {
rewrite ^/(.*) http://www.example.com permanent;
}
Run Code Online (Sandbox Code Playgroud)
我在日志中收到以下错误:
[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"
Run Code Online (Sandbox Code Playgroud)
为什么它尝试重定向太多次?
更新:
我试过:
if ($request_uri ~ .*.php.*) {
rewrite ^/ http://www.example.com permanent;
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但是当 URL 以“?”开头时 我得到同样的错误。这样,50%的问题就解决了……
解决方案:
if ($request_uri ~ .*.php.*) {
#return 410;
rewrite ^ http://$host? permanent;
Run Code Online (Sandbox Code Playgroud)
问题出在重写上。
我将重写更改为返回代码 410,我认为我会这样做,而不是返回返回 301(永久)。
所以,这里是代码:
if ($request_uri ~ .*.php.*) {
return 410;
}
Run Code Online (Sandbox Code Playgroud)
现在,对于在 URL 中任何位置包含“.php”的所有页面,nginx 将返回 4010。我的 django 网站现在可以和平相处了 ;-)
归档时间: |
|
查看次数: |
20530 次 |
最近记录: |