ユーザープロファイルのURLの次の短縮形があります
RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1
私が行うとき、サイトは適切なcssファイルでスタイル設定されていますsite.com/name_of_user
でも、そうしないとsite.com/name_of_user/
リダイレクトは正しいページですが...
助けていただければ幸いです!
これを修正する最も簡単な方法は、HTMLファイルの<head>
にCSSファイルへのフルパスを指定することです。
Mod_rewriteルールがCSSファイルの場所へのパスを変更している場合は、これをRewriteRule
の前に配置することもできます。
RewriteCond %{REQUEST_FILENAME} !-f
これにより、要求がファイルに一致しないことを確認してから、ファイルを書き換えます。
私も同じ問題を抱えており、最も簡単で実用的な解決策を見つけました。
<base href="http://www.example.com/" />
とてもきれいで使いやすいです。
ルートディレクトリのサンプルに相対してcssファイルをリンクします。
<link rel="stylesheet" type="text/css" href="/css/****.css">
ページの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が発生し、ページはスタイル、スクリプト、画像なしで表示されます。
この問題は、次のいずれかの方法で解決できます。
CSS、JS、画像ファイルでは、相対パスではなく絶対パスを使用してください。つまり、これらのファイルのパスがhttp://
またはスラッシュ/
で始まることを確認する必要があります。
それ以外の場合これを追加できますすぐ下ページのHTMLの<head>
セクション:
<base href="/" />
すべての相対URLは、現在のページのURLではなく、そのベースURLから解決されるようにします。
あなたの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>
を使用すると、この動作は行われません。これは、特に相対サイトのファイル構造では正常に機能します。
これを試して:
<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>
最も簡単な方法は、<base href="site url here">
、これはHTMLの開始タグhead
の直後です。サイトのURLはhttpまたはhttpsで始まる必要があります。ローカルホストを使用している場合は、たとえばhttpを使用します。
http://localhost/road/
RewriteCond %{REQUEST_FILENAME} !-f
これは御馳走のように機能します。私はもともと絶対的なリンクを与えることでさえ問題を抱えていました。 Steve Lewisに感謝し、+ 1します。
このsite.com/name_of_user/
を使用すると、サイトの作業ディレクトリがroot
からname_of_user
に変更されるため、リクエストされたページの各ファイルまたはリンクの相対パスは、/name_of_user/
ではなく/
になります。
これを修正するには、.htaccessにルールを追加する必要があります。
RewriteRule ^name_of_user/(.*)?$ $1
開始タグの後にベースパスを追加するだけです。例えば:
<base href="website url here">
私は同じ問題のように思われるものを持っています。次の形式のサイトからリダイレクトしようとしました:www.foo/category/details。
「カテゴリ」がCSSと画像の両方のロードを停止した後、スラッシュを見つけました。
原因は、デフォルトのリダイレクトが元のURLをブラウザーに渡すことです。これは、window.location.pathnameのJScriptトレースから確認できます。解決策は、書き換えルールで[R]フラグを使用することです。