使用Apache mod_rewrite链接文件进行路由不起作用

时间:2015-03-31 21:30:26

标签: php apache .htaccess mod-rewrite

我有这个(并且它有效):在Apache上使用PHP,我已经设置了htaccess来将所有通用友好/ urls / with / slashes路由到index.php。这是我的htaccess代码:

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

出于测试目的,我的index.php文件包含非常简单的HTML,其中包含指向正确路径的JavaScript文件的链接:

<!DOCTYPE html>
<html>
<head>
<title>A Test Page Goes Here</title>
    <script src="foo.js" type="text/javascript"></script>
</head>
<body></body>
</html>

我正在调用的foo.js文件里面只有最简单的诊断:

console.log('howdy');

当我尝试使用正确的网址访问此网页时,如果没有调用重定向,则效果很好。像这样:

http://myhost/index.php

当我尝试使用ONE url参数访问此页面时,如下所示:

http://myhost/home

一切仍然按预期工作。出现该页面,JavaScript链接正常工作。

但是当我尝试使用更多网址来访问该网页时,如下所示:

http://myhost/pages/home

我收到两个错误,如下:

Uncaught SyntaxError: Unexpected token <

Resource interpreted as Script but 
transferred with MIME type text/html: "http://myhost/home/foo.js".

当我使用浏览器的开发工具查看导致错误的JS代码时,这就是JS文件的内容所说的内容:我的index.php文件返回的HTML完全相同。 (所以,难怪会产生JavaScript错误。)

所以,告诉我的是,从我的HTML代码到foo.js的调用被重定向,并且正在返回index.php的内容而不是foo.js的内容。但只有在我的URL中有多个元素时才会发生这种情况。

顺便说一句,不只是JS不能正常工作......任何CSS文件的链接都会遇到同样的问题(它们会从index.php返回为HTML)。所以它似乎是链接和返回另一个文件,而不是它是什么类型的文件。

所以......我很难过。我需要使用htaccess的一些技巧,我不是吗?任何人的想法?

1 个答案:

答案 0 :(得分:0)

将您的HTML更改为以下内容:

<!DOCTYPE html>
<html>
<head>
<title>A Test Page Goes Here</title>
    <script src="/foo.js" type="text/javascript"></script>
</head>
<body></body>
</html>