22

私は次のルールに従いました.htaccess

Options +FollowSymLinks

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

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

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

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

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

.htaccessすべてのPHPファイルの編集に依存せず、「相対パス」を使用できる、ルールに基づく他のソリューションはありますか?

4

7 に答える 7

24

1つの解決策は、絶対パス(css /、/jsだけでなく/css、または/ jsなど)を使用することですが、すべてのファイルで変更する必要があるため、これは信頼できる解決策ではありません。

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

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

<base href="/">
于 2012-10-14T22:31:48.317 に答える
20

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

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

これはうまくいくはずですが、私はこのようには行きません。

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

于 2012-10-26T19:24:57.020 に答える
7

コア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]
于 2013-09-30T20:10:18.340 に答える
1

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

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

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

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

于 2012-10-27T23:12:25.027 に答える
0

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

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]
于 2017-08-04T07:57:15.383 に答える
0

自動的にロードされるディレクトリを除外するだけです。

RewriteRule ^(css|js|fonts|images|plugins)($|/) - [L]
于 2020-06-18T12:45:10.843 に答える
0

スタイルリンクをから変更すると問題が解決しました

 <link href="css/styles.css" rel="stylesheet" />

の中へ <link href="/css/styles.css" rel="stylesheet" />

于 2022-01-07T08:15:38.713 に答える