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


Routing with Apache mod_rewrite linked files do not work

我有这个(而且它很有效):在Apache上使用PHP,我设置了htaccess,将所有通用友好的/urls/with/srashes路由到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');

当我尝试使用正确的url访问这个页面时,没有重定向调用,效果很好。像这样:

http://myhost/index.php

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

http://myhost/home

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

但当我尝试使用更多的url片段访问页面时,比如:

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的形式返回)。因此,它似乎是链接并返回另一个文件,而不是它是什么类型的文件。

所以。。。我被难住了。有没有什么技巧需要我使用,而我没有?有人有什么想法吗?

将HTML更改为以下内容:

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