在.htaccess中编写规则以匹配正确的图像文件夹位置

时间:2015-05-17 16:21:42

标签: php regex .htaccess mod-rewrite wampserver

在我的单页面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

1 个答案:

答案 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]多余)。