.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
ルールに基づくその他のソリューションはありますか?
怠けずに、リソースの相対URIを_/css/style.css
_のようなルートディレクトリの絶対パスに変更してください。これが一番だ。
賢くなり、正規表現を使用して、必要なすべてのファイルを置き換えることができます。これは、いくつかのライナーのようになり、完了です。変更できる場所はいくつありますか?そして、テンプレートを使用する必要があります。
これは機能するはずですが、私はこのようには行きません。
RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
1つの解決策は、絶対パスを使用することです(たとえば、css /、/ jsではなく/ css、または/ jsですが、すべてのファイルで変更する必要があるため、これは信頼できるソリューションではありません。
これは、相対URIのベースが変更されているためです。もともと、ページが/
の場合、ベースは/detail.php?id=123
であり、ブラウザは相対リンクに/
ベースで適切に入力します。しかし、ブラウザーが/detail/123
のようなページに移動すると、ベースは突然/detail/
になり、すべての相対URLの前にそれを追加しようとするため、ロードされません。
リンクを絶対にするか、ページのヘッダーのURIベース(<head> </head>
タグ間)を変更できます。
<base href="/">
コア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]
アンソニーの答えは完全に有効であり、実際に彼はそこにいくつかの良い習慣を伝えようとしています。
しかし、あなたはその答えに満足していないようですので、ここに別の解決策があります。 Rewrite-Commandの前に.htaccessに次の行を挿入するだけです:
RedirectMatch permanent ^/detail/((css|js)/.*) /$1
/details/css/style.cssおよび/details/js/js.sに対する元々の404リクエストを実際の場所にリダイレクトします。特にきれいでもエレガントでもありませんが、それは単に動作します。
このコードは完璧に機能します。リダイレクトルールの前に追加します(RewriteRule ^ detail /([0-9] +)/?$ detail.php?id = $ 1)
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]