0

我一直在做一个使用 pushstate 来管理站点导航的项目。该项目目前托管在 Godaddy 共享托管帐户上,我刚刚使用 HTTPD 设置了 Amazon EC2 Linux 服务器,并将文件传输到新服务器。我必须添加一个 .htaccess 文件来帮助进行 pushstate 导航,这样当我尝试访问http://example.com/page1时它就不会出现 404 。

当我尝试访问godaddy 服务器上的http://example.com/page1之类的页面时,它的行为应如此 - 它不会尝试访问实际页面,而是使用根页面并附加 url 路径 /page1 和我的javascript 负责以视觉方式显示 page1 的内容。然而,在亚马逊服务器上,它把我带到了一个 404 页面。我对 .htaccess 和推送状态还很陌生,所以我不得不放弃我在堆栈溢出时能找到的东西来帮助我让它工作(至少在 Godaddy 服务器上)。这是文件:

RewriteEngine On
RewriteRule ^([^/d]+)/?$ index.html?id=$1 [QSA]

不确定我是否使用了正确的方法,也不知道为什么一台服务器会给我不同的结果?

谢谢

编辑

所以我已经在我的 httpd.conf 文件中将 allowOveride 设置为 all ,如下所示:

<Directory "/">
    AllowOverride All
</Directory>

在这里值得注意的是,我使用的是 HTTPD 而不是 Apache2 - 我不确定这是否会有所作为,但似乎是相同的过程。我还使用重新启动了服务器,sudo service httpd restart但结果仍然相同。我确实尝试了 vhost 选项,虽然我不记得我为它写的确切内容,但我将它应用于 */80,所以我相当确定它写得正确。

我可以采取任何其他步骤来进一步调试它并尝试准确指出问题所在吗?

4

1 回答 1

0

请检查您的 apache2 配置 ( /etc/apache2/apache2.conf ) 以获取以下设置:

<Directory "/">
AllowOverride None
</Directory>

这将不允许 .htaccess 文件中的自定义设置覆盖服务器设置。因此,如果您发现在您的 apache2 配置中,您有 2 个选项:

1)将其替换为AllowOverride All,保存配置并重新启动 apache2 服务(适用于服务器范围)

2) 保留它并AllowOverride All严格添加到您站点的虚拟主机配置中(仅适用于添加它的虚拟主机)。

于 2017-08-07T13:17:37.597 回答