1

.htaccessファイルに次のコードがあります。

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^profile/(.*)$ profile.php?username=$1

私のCSSスタイルシートは、最後のルール(プロファイル用)に一致するものを除いて、すべてのページで機能しています:

RewriteRule ^profile/(.*)$ profile.php?username=$1

たとえば、 と入力するwww.mydomain.com/registerと、スタイルシートが機能しています。しかし、入力するwww.mydomain.com/profile/usernameと、スタイルシートが機能しません。

スタイルシートとその他の補助ファイルはcss/images/js/、 などの別のフォルダーにあります。

私に何ができる?助けてください:D


編集: 次のようなヘッダーとフッターがあります: includes/header.php, includes/footer.php. ファイルheader.phpには PHP コードがあります。

<?php include 'head.php'; ?>

これhead.phpは、CSS のメタ タグです。

<link rel="stylesheet" href="css/screen-site.css">

フォルダ構造のスクリーンショットは次のとおりです: http://shrani.si/f/3z/13T/1OKC8ZJc/site.png

4

2 に答える 2

4

問題は、それらがすべて内部的な書き換えであることです。そのため、Web サーバーが からデータを送信して/profile.php?username=whateverいる場合でも、ブラウザは からページを受信して​​いると認識しますhttp://www.mydomain.com/profile/whatever

したがって、 のような相対 URL を検出すると、存在しないcss/screen-site.cssに解決されます。http://www.mydomain.com/profile/css/screen-site.css

この問題を解決するには、少なくとも 3 つの異なる方法を考えることができます。

  1. 最も簡単でおそらく最善の解決策は/、リンクの先頭に a を追加して、 のようにすることです/css/screen-site.css。スラッシュにより、ブラウザーは URL パスを現在のディレクトリではなく、サイトのルート ディレクトリからの相対パスとして扱います。

  2. または、 slash197 が示唆するように、baseHTML セクションにタグを含めることもできます。そうすれば、HTML 内のすべての相対 URL は、サイトのルートを基準として解釈されます。head<base href="http://www.mydomain.com/">

  3. 次のような書き換えルールを追加して問題を修正することもできます。

    RewriteRule ^profile/((css|images|js)/.*) $1 [L]
    

    ただし、これは最初の 2 つのソリューションよりも効率的ではありません。ブラウザーは、異なる URL が実際には同じスタイル シートを参照していることを認識しないためです (また、外部の書き換えを使用して同じスタイル シートであることを伝える場合でも、サーバーにクエリを実行して確認します)。

于 2012-12-25T14:44:28.147 に答える