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 和 ssl.conf 的区别

httpd 未按预期读取 conf/httpd.conf 中的文档根目录

httpd.conf、php.ini 和 .htaccess 之间的区别

修改 httpd.conf 文件

httpd.conf 和虚拟主机 SSL 的重写规则