服务器移动:所有页面都指向主页

时间:2016-03-18 作者:Will

The Problem.

无论我输入哪个URL,所有页面都会显示站点的静态首页。已知的站点URL加载主页(但保留输入的URL),应该是404个路径,如/I-know-you-do-not-exist-4343 同时加载主页(同样,保留URL)。

我可以毫无问题地访问WordPress管理员,这只是网站前端的问题。

而且the site works fine 如果我完全移除permalinks?post=2. 网站css/js/图像加载良好。

Just the facts, please:

  • Ubuntu 14.04
  • Apache 2.4.7
  • PHP 5.6.19-1
  • nginx 1.4.6(前端)
  • Wordpress 4.4.2
  • mod\\u rewrite已启用(下面的conf文件)
  • 权限和所有权都已设置。WP可以重写。htaccess文件
我通常在中动态定义两个站点url选项wp-config 但已经尝试删除它们,并在wp配置中手动输入它们,并直接将其输入数据库。

define(\'WP_SITEURL\', \'http://\' . $_SERVER[\'SERVER_NAME\'] . \'/wordpress\');
define(\'WP_HOME\',    \'http://\' . $_SERVER[\'SERVER_NAME\']);
我刷新了permalinks,捣碎了Cookie,重新启动了大约800次apache。

我已禁用所有插件。

出于源代码管理的原因,Wordpress位于子文件夹ala中Jaquith’s skeleton. 大体上

 /var/www/html/ 
 /var/www/html/app/ (wp-content)
 /var/www/html/media/ (wp-content/uploads) 
 /var/www/html/wordpress/
下面是我的conf文件中的位:

    DocumentRoot /var/www/html
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
基本nginx->apache工作正常。发送时间:8080和ports.conf 以及我的虚拟主机站点。conf文件正在侦听它。也就是说,如果我<?php phpinfo(); ?> 在一个静态php文件中,所有操作都按预期进行。

最初,我遇到了无限循环问题,并将其添加到我的站点插件中:

remove_filter(\'template_redirect\', \'redirect_canonical’);
以下是nginx conf(基本上是internetz说要使用的标准版本):

server {
   listen 80;
   root /var/www/html;
   index index.php index.html index.htm;

   server_name example.com;

   location / {
     try_files $uri $uri/ /index.php;
   }

   location ~ \\.php$ {
     proxy_set_header X-Real-IP  $remote_addr;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header Host $host;
     proxy_pass http://127.0.0.1:8080;
   }

   location ~ /\\.ht {
      deny all;
   }
}
下面是典型请求的响应标头:

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Thu, 17 Mar 2016 02:13:24 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 5600
Connection: keep-alive
Link: <http://example.com/wp-json/>; rel="https://api.w.org/", <http://example.com/>; rel=shortlink
Vary: Accept-Encoding
Content-Encoding: gzip

1 个回复
最合适的回答,由SO网友:Richard Smith 整理而成

您的代理正在将所有内容重写为index.php, 这意味着后端永远看不到原始URI。代理应该是透明的,如下所示:

server {
   listen 80;

   server_name example.com;

   location / {
     proxy_set_header X-Real-IP  $remote_addr;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header Host $host;
     proxy_pass http://127.0.0.1:8080;
   }
}