2

最近、CodeIgniterを使用しようとしています。

デフォルトでは、このようなURIにindex.phpがあります

http://www.example.com/index.php/home

homeコントローラ内の機能です

しかし、私は望まないindex.phpので、.htaccessファイルを作成しました。

Allow from all
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|img|robots\.txt|script|css)
RewriteRule ^(.*)$ index.php/$1 [L]

基本的に、条件が一致する場合を除いて、「index.php」が自動的に追加されます。

ただし、
これが重要です。次のようなURIの場合:http://www.example.com/home
すべてが正常に機能します。

このようなURIの場合:http://www.example.com/home/
その後、私のWebページの相対リンクがワイルドになります。
例: css/common.cssにリダイレクトされたindex.php/home/css/common.css結果、cssファイルが見つかりませんでした。

ログは次のようになります。

strip per-dir prefix: [dir to my site]/home/css/common.css -> home/css/common.css
applying pattern '^(.*)$' to uri 'home/css/common.css'
rewrite 'home/css/common.css' -> 'index.php/home/css/common.css'
add per-dir prefix: index.php/home/css/common.css -> [dir to my site]/index.php/home/css/common.css
trying to replace prefix [dir to my site]/ with /
internal redirect with /index.php/home/css/common.css [INTERNAL REDIRECT]
add path info postfix: [dir to my site]/index.php -> [dir to my site]/index.php/home/css/common.css
strip per-dir prefix: [dir to my site]/index.php/home/css/common.css -> index.php/home/css/common.css
applying pattern '^(.*)$' to uri 'index.php/home/css/common.css'
pass through [dir to my site]/index.php

どうすればこれを修正できますか?

4

1 に答える 1

2

ここでの問題は、書き換えルールではなく、問題ありません。何が起こっているかというと、ブラウザは/home/最後にスラッシュが付いているのが実際のディレクトリであると考えているため、それが存在すると考えているディレクトリへのすべての相対リンクを接頭辞として付けます。次に、ブラウザは CSS ファイルのリクエストを path/home/css/common.cssでダッシュします。 、チェックと一致しないため、書き換えられます。

ここで見た最も簡単な解決策は、CSS ファイルの絶対パスを使用することです。/css/common.css現在の相対リンクの代わりに、それらをリンクするだけです。

于 2012-07-14T00:43:49.767 に答える