htaccess将所有子文件夹(/../ ..)重写为index.html

时间:2013-10-14 04:21:00

标签: regex apache .htaccess mod-rewrite

我正在创建一个单页应用程序。当用户更改网址或重新加载时,“mysite.com/”之后的任何内容都会作为变量发送到ajax请求的子目录内容(例如/ users / me)

当相对url只有一个“子目录”时,此代码很有用。 但是子子目录,甚至只是“子目录/”,会收到错误并且不加载任何内容。

  • mysite.com/sub_directory --------------------------导航到mysite.com/index.html
  • mysite.com/sub_directory/ -------------------------抛出错误
  • mysite.com/sub_directory/sub-sub-directory ---抛出错误

资源解释为样式表,但使用MIME类型text / html传输:“mysite.com/all/default.css”
资源被解释为脚本但使用MIME类型text / html传输:“mysite.com/all/jquery.js”


htaccess尝试:将“mysite.com/”之后的任何内容重定向到index.html。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.html [L]


附加信息:
。*和(^ /?。 $)和(^。 / $)*和。* /等产生相​​同的结果
包括.css和.js文件的AddType规则似乎什么都不做。
htaccess文件与index.html位于同一文件夹中

这是正则表达式问题吗?通常当htaccess代码出现问题时,服务器会响应500内部服务器错误,但在这种情况下,不会加载内容并抛出上述错误。

更新:我有一堆脚本位于“scripts”文件夹中,该文件夹与index.html和.htaccess位于同一目录级别。它们都加载没有错误,也许问题是.htaccess不适用于自己目录级别的文件?


1 个答案:

答案 0 :(得分:0)

修正:好的,所以我让它运转了。客户端会挂起,因为它找不到我引用的jquery和css文件。我在想当发生的事情是当服务器读取并加载index.html时,它就行了

<script src="default.css"></script> 
<script src="jquery.js"></script>

由于它们不是对其文件位置的硬引用,因此找不到它们并且htaccess将请求重新路由回index.html,它继续循环到无限,导致浏览器挂起。

只需将所有“真实”文件引用更改为非相对链接即可解决问题

e.g。

<script src="http://www.mysite.com/default.css"></script>
愚蠢的是,这是解决方案,但我想问题可能很难,因为答案太简单而无法注意到