最近我将使用 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;
}