![Nginx 后面的 Apache 重定向 301 问题](https://linux22.com/image/714447/Nginx%20%E5%90%8E%E9%9D%A2%E7%9A%84%20Apache%20%E9%87%8D%E5%AE%9A%E5%90%91%20301%20%E9%97%AE%E9%A2%98.png)
我的非 wwwexample.com
已被重定向至www.example.com/index.php
。
注意:我正在使用 nginx 虚拟主机文件进行重定向.htaccess
,而不是使用 nginx 虚拟主机文件。
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule (.*) http://www.example.com/$1 [L,R=301]
如果我注释掉这些行.htaccess
并尝试通过 nginx 虚拟主机文件重定向,curl 会按照设置正确响应,但是访问时收到 404(我的网站模型)www.example.com
。
顺便问一下,通过 nginx 重定向是否更好.htaccess
?因为我使用 nginx 作为代理。
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
虚拟主机代码 Nginx
server {
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
curl -I example.com
HTTP/1.1 301 Moved Permanently
Date: Mon, 04 Dec 2017 20:39:54 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: __cfduid=d7048cb8bebb2c847d904c46cd78d8f0c1512419;
expires=Tue, 04-Dec-18 20:39:54 GMT; path=/; domain=.example.com; HttpOnly
Location: http://www.example.com/
Server: cloudflare-nginx
CF-RAY: 3c8193e88245-EWR
所有网站都运行良好,但仅在索引处我收到 403 Forbidden。注意:这是一个内部重定向,所以我不知道 nginx 或 apache 哪一个性能更好。在 apache 中,非 www 重定向到 www.example.com/index.php(我不想要这个 .index.php,而在 nginx 中重定向正常,但我在主页收到 403,而网站的其余部分运行良好。
答案1
我将重定向放在同一个块内,并且我需要为主机server {}
放入一个单独的块。server {}
example.com
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}