1

我正在使用一个小的重定向来让我index.php解析所有参数,但在某些情况下,它再也找不到我的 javascript 文件了。

这个小的 .htaccess 将所有不存在的请求重写为index.php.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1
RewriteRule ^(.*)/$ index.php/$1

index.phpjavascript url返回的我的一部分index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript" src="scripts/jquery-1.10.2.min.js"></script>
  • www.mysite.com/foo 工作正常
  • www.mysite.com 也可以正常工作
  • www.mysite.com/foo/foo 不工作。index.php当我用 firebug 检查它时,它会作为一个 javascript 文件返回。

为什么改变相对路径?我正在重定向到,index.php所以我希望在那个文件夹中。

作为替代方案:如何获取出于调试目的而请求的 javascript 的完整路径?有没有办法找到正在发出的 .js 请求index.php

4

1 回答 1

1

由于额外的斜线,浏览器认为您的相对链接(例如"scripts/jquery-1.10.2.min.js")在子目录中有一个 URI 基。所以你要么需要让你的链接绝对而不是相对:

<script type="text/javascript" src="/scripts/jquery-1.10.2.min.js"></script>

或者在您的标头中添加一个相对 URI 基础:

<base href="/" />

这里的另一件事是您的第二个重写规则没有任何条件。RewriteConds适用于紧随其后的RewriteRule. 另一件事是第一条规则将始终被应用,因为它(.*)匹配所有内容,包括带有斜杠的 URI。因此,第二条规则永远不会被应用。您应该始终将斜杠设为可选:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/?$ index.php/$1
于 2013-09-05T19:16:16.500 回答