httpd.conf 和 HTML5 pushstate()
Posted
技术标签:
【中文标题】httpd.conf 和 HTML5 pushstate()【英文标题】:httpd.conf and HTML5 pushstate() 【发布时间】:2012-12-11 15:03:46 【问题描述】:我正在运行一个支持 html4 哈希和 HTML5 pushstate() 的启用 AJAX 的网站。
我刚刚迁移到 AWS EC2 实例(运行 apache 的 Linux 服务器),两个站点都运行良好。
我遇到的唯一问题是当我刷新 HTML4 哈希页面时,正确的页面会显示出来。
但是,当我刷新像 http://www.datingjapan.co/conversations 这样的 HTML5 页面时,我收到以下错误消息:
看来 apache 正在尝试进入文件夹“convertations”,而不是只调用站点“index.php”,然后使用 jquery 加载正确的页面。
任何人都可以建议这里可能是什么问题。我假设它是一个 httpd.conf 设置。
谢谢
【问题讨论】:
我想你的意思是pushstate()
— popstate
is an event, not a function。在这种情况下,“哈希标签”也不合适——如果您指的是 URL 中包含 #
哈希字符之后的部分,那只是哈希,而不是哈希标签。
谢谢你更新了问题..
不客气。我更新了我的答案:Alias
不是要走的路。
【参考方案1】:
我自己没有使用过pushState()
,但是如果浏览器正在向 www.datingjapan.co 发送/conversations
的请求,那么 Apache 确实会在其文档根目录中查找名为“conversations”的文件或文件夹,除非你告诉它做一些不同的事情。
如果您希望 www.datingjapan.co 上的所有 URL 都由一个 index.php 文件处理,那么您可以在 Apache 设置文件中使用 the AliasMatch
directive:
AliasMatch ^.*$ /index.php
我认为这将导致所有 URL 都由 index.php 处理。 (不过我对 Apache 配置不是很感兴趣,所以我可能是错的。)
【讨论】:
【参考方案2】:如果您尝试使用 index.php
文件作为某种类型的引导程序,您可能想在您的 .htaccess
文件中尝试此操作:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %HTTP_HOST !^(www\.).+$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-l
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
基本上这会将所有请求从非 www 重定向到 www,然后如果它不是文件或目录,它会将请求转发到 index.php
文件。
【讨论】:
请注意,如果您将这些指令放入 httpd.conf 而不是 .htaccess,则必须将它们放入 Directory 标签中,例如目录>以上是关于httpd.conf 和 HTML5 pushstate()的主要内容,如果未能解决你的问题,请参考以下文章
向 httpd.conf 添加了 mime 类型,但仍然不加载视频(放弃)
httpd 未按预期读取 conf/httpd.conf 中的文档根目录