我一直在做一个使用 pushstate 来管理网站导航的项目。该项目目前托管在 Godaddy 共享主机帐户上,我刚刚使用 HTTPD 设置了一个 Amazon EC2 Linux 服务器,并将文件传输到新服务器。我不得不添加一个 .htaccess 文件来帮助进行 pushstate 导航,这样当我尝试 http://example.com/page1 时它就不会是 404。
当我尝试在 godaddy 服务器上访问像 http://example.com/page1 这样的页面时,它的行为就像它应该的那样 - 它不会尝试访问实际页面,而是使用根页面并附加网址路径/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,所以我相当确定它写得正确。
我是否可以采取任何其他步骤来进一步调试它并尝试准确指出它出错的地方?
请检查您的 apache2 配置 (/etc/apache2/apache2.conf( 以了解下面的设置:
<Directory "/">
AllowOverride None
</Directory>
这将不允许服务器设置被 .htaccess 文件中的自定义设置覆盖。因此,如果您发现在 apache2 配置中您有 2 个选项:
1(将其替换为AllowOverride All
,保存配置并重新启动apache2服务(适用于服务器范围(
2( 保留原样,并严格AllowOverride All
添加到站点的虚拟主机配置中(仅适用于添加它的虚拟主机(。