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.phpfirebugで調べるとjavascriptファイルとして返ってきます。

相対パスが変更されるのはなぜですか? にリダイレクトしてindex.phpいるので、そのフォルダーにいることを期待しています。

別の方法: デバッグ目的で要求されている JavaScript の完全なパスを取得するにはどうすればよいですか? によって作成された .js リクエストを見つける方法はありますindex.phpか?

4

1 に答える 1

1

Because of the extra slash, the browser thinks that your relative links (e.g. "scripts/jquery-1.10.2.min.js") have a URI base in a subdirectory. So you either need to make your links absolute instead of relative:

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

Or add a relative URI base in your header:

<base href="/" />

The other thing here is that your second rewrite rule doesn't have any conditions. RewriteConds only get applied to the immediately following RewriteRule. The other thing is that the first rule will always get applied because (.*) matches everything, including URI's with a trailing slash. Thus the second rule never gets applied. You should always make the slash optional:

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