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