web-dev-qa-db-ja.com

htaccess書き換えルールを使用したリダイレクト後にCSSが読み込まれない

ユーザープロファイルのURLの次の短縮形があります

RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1

私が行うとき、サイトは適切なcssファイルでスタイル設定されていますsite.com/name_of_user

でも、そうしないとsite.com/name_of_user/

リダイレクトは正しいページですが...

助けていただければ幸いです!

17

これを修正する最も簡単な方法は、HTMLファイルの<head>にCSSファイルへのフルパスを指定することです。

Mod_rewriteルールがCSSファイルの場所へのパスを変更している場合は、これをRewriteRuleの前に配置することもできます。

RewriteCond %{REQUEST_FILENAME} !-f

これにより、要求がファイルに一致しないことを確認してから、ファイルを書き換えます。

28
Steve Lewis

私も同じ問題を抱えており、最も簡単で実用的な解決策を見つけました。

<base href="http://www.example.com/" />

とてもきれいで使いやすいです。

15
Query

ルートディレクトリのサンプルに相対してcssファイルをリンクします。

<link rel="stylesheet" type="text/css" href="/css/****.css">
12

ページのURLがexample.com/name_of_user/の場合、リソースのcss/js/imagesをロードすると、HTMLページでこれらのリソースにrelative pathを使用している場合に問題が発生する可能性があります。これは、ブラウザが現在のURLを使用してリソースURLを解決するためです。

たとえば、スタイルタグが次の場合:

<link rel="stylesheet" type="text/css" href="static/style.css">

現在のページのURLは次のとおりです。

http://example.com/name_of_user/

次に、ブラウザーはcss URLをexample.com/name_of_user/static/style.cssではなくexample.com/static/style.cssとして解決します。これにより、リソースURLに404が発生し、ページはスタイル、スクリプト、画像なしで表示されます。

この問題は、次のいずれかの方法で解決できます。

  1. CSS、JS、画像ファイルでは、相対パスではなく絶対パスを使用してください。つまり、これらのファイルのパスがhttp://またはスラッシュ/で始まることを確認する必要があります。

  2. それ以外の場合これを追加できますすぐ下ページのHTMLの<head>セクション:

    <base href="/" />
    

すべての相対URLは、現在のページのURLではなく、そのベースURLから解決されるようにします。

9
anubhava

あなたのhtmlドキュメントのヘッドセクションで正しいbasedirを設定してみてください:

<head>
  <base href="http://example.com/">
<head>

次に、.htaccessルールにスラッシュ(/)を追加しても、htmlドキュメントの外部ソースパスは変更されません。次のルール

RewriteEngine On
RewriteBase /
RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1 

ドキュメントの<base href="http://example.com/"><head>を使用すると、この動作は行われません。これは、特に相対サイトのファイル構造では正常に機能します。

6
uxmal

これを試して:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\.(gif|jpg|png|jpeg|css|js|swf)$ /public/$1.$2 [L,NC]

    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

</IfModule>
2
Thanh Siel

最も簡単な方法は、<base href="site url here">、これはHTMLの開始タグheadの直後です。サイトのURLはhttpまたはhttpsで始まる必要があります。ローカルホストを使用している場合は、たとえばhttpを使用します。

http://localhost/road/ 
1
RewriteCond %{REQUEST_FILENAME} !-f

これは御馳走のように機能します。私はもともと絶対的なリンクを与えることでさえ問題を抱えていました。 Steve Lewisに感謝し、+ 1します。

1

このsite.com/name_of_user/を使用すると、サイトの作業ディレクトリがrootからname_of_userに変更されるため、リクエストされたページの各ファイルまたはリンクの相対パスは、/name_of_user/ではなく/になります。

これを修正するには、.htaccessにルールを追加する必要があります。

RewriteRule ^name_of_user/(.*)?$ $1
0
razzak

開始タグの後にベースパスを追加するだけです。例えば:

<base href="website url here">
0
Ahmad Lone

私は同じ問題のように思われるものを持っています。次の形式のサイトからリダイレクトしようとしました:www.foo/category/details。

「カテゴリ」がCSSと画像の両方のロードを停止した後、スラッシュを見つけました。

原因は、デフォルトのリダイレクトが元のURLをブラウザーに渡すことです。これは、window.location.pathnameのJScriptトレースから確認できます。解決策は、書き換えルールで[R]フラグを使用することです。

0
John McMillan