web-dev-qa-db-ja.com

URL書き換え:css、js、および画像が読み込まれない

.htaccessのルールに従っています

Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]

RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1

http://localhost/detail/123 URLをhttp://localhost/detail.php?id=123にリダイレクトします。ページは正常にリダイレクトされますが、問題はCSS, JS, and imagesがロードされていないことです。

CSS、jsファイルはhttp://localhost/css/およびhttp://localhost/js/の下にあります

1つの解決策は、絶対パス(ex CSS /、/ jsではなく/ CSS、または/ jsを使用することですが、これはすべてのファイルで変更する必要があるため、信頼できる解決策ではないようです。

すべてのPHP=ファイルを編集し、「相対パス」を使用できるようにすることから独立した.htaccessルールに基づくその他のソリューションはありますか?

20
Bhavesh Gangani

怠けずに、リソースの相対URIを_/css/style.css_のようなルートディレクトリの絶対パスに変更してください。これが一番だ。

賢くなり、正規表現を使用して、必要なすべてのファイルを置き換えることができます。これは、いくつかのライナーのようになり、完了です。変更できる場所はいくつありますか?そして、テンプレートを使用する必要があります。

これは機能するはずですが、私はこのようには行きません。

RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]

19

1つの解決策は、絶対パスを使用することです(たとえば、css /、/ jsではなく/ css、または/ jsですが、すべてのファイルで変更する必要があるため、これは信頼できるソリューションではありません。

これは、相対URIのベースが変更されているためです。もともと、ページが/の場合、ベースは/detail.php?id=123であり、ブラウザは相対リンクに/ベースで適切に入力します。しかし、ブラウザーが/detail/123のようなページに移動すると、ベースは突然/detail/になり、すべての相対URLの前にそれを追加しようとするため、ロードされません。

リンクを絶対にするか、ページのヘッダーのURIベース(<head> </head>タグ間)を変更できます。

<base href="/">
20
Jon Lin

コアphpのプロジェクトにURL書き換えを適用しました。私は同じ問題に直面しました。 CSS、JS、および画像がロードされていませんでした。私はこれを使用し、それは私のために働いた。 ソース

# Allow any files or directories that exist to be displayed directly
RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
6
Sajal

アンソニーの答えは完全に有効であり、実際に彼はそこにいくつかの良い習慣を伝えようとしています。

しかし、あなたはその答えに満足していないようですので、ここに別の解決策があります。 Rewrite-Commandの前に.htaccessに次の行を挿入するだけです:

RedirectMatch permanent ^/detail/((css|js)/.*)  /$1

/details/css/style.cssおよび/details/js/js.sに対する元々の404リクエストを実際の場所にリダイレクトします。特にきれいでもエレガントでもありませんが、それは単に動作します。

1
Perleone

このコードは完璧に機能します。リダイレクトルールの前に追加します(RewriteRule ^ detail /([0-9] +)/?$ detail.php?id = $ 1)

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]
0
danu