在我的单页面webapp中,我使用了html5历史记录API,以便网址可以有一个REST模式(/ section1 / stuff1 ..),并且我计划制作一种javascript路由器以导航到页面的几个部分取决于URL路径。
现在我仍在使用本地服务器(wamp),我添加了一个.htaccess文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]
到该网址的app根目录,其中包含对页面某些部分的引用(例如subdomain / sectionN),可以始终重定向到index.php,重定向成功但所有外部资源都无法加载,我得到了:
Resource interpreted as Image but transferred with MIME type text/html: "http://localhost/subdomain/section1/images/imgname.gif".
及其逻辑,因为images文件夹位于app根目录中,而不在/section1
文件夹下,而.htaccess规则RewriteRule (.*) index.php/$1 [L]
应仅包含/images/imgname.gif
部分在http://localhost/subdomain/
之后将它连接起来。
我发现this是一个类似的问题,所以我重写了.htaccess文件,如下所示:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?section1/(.+)$ index.php/$1
RewriteRule (.*) index.php/$1 [L]
但我得到了500 Internal Server Error
。
答案 0 :(得分:1)
这两条规则:
RewriteRule ^/?section1/(.+)$ index.php/$1
RewriteRule (.*) index.php/$1 [L]
可能都会应用于单个网址,因为第一条规则之后没有[L]
(最后)标记。所以这样的URL:
section1/stuff/page1.html
将通过第一条规则转换为此:
index.php/stuff/page1.html
然后将被送入第二条规则并转换为:
index.php/index.php/stuff/page1.html
这很可能是造成500内部服务器错误的原因。如果您将[L]
添加到第一个规则,那么在第一个规则与网址匹配并已应用的情况下,将不会应用第二个规则:
RewriteRule ^/?section1/(.+)$ index.php/$1 [L]
如果您不希望重写图片网址,那么只需删除第二个RewriteRule
(实际上会使[L]
多余)。