1

私はかなり標準的な .htaccess ファイルを持っています:

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]

パラメーターが 1 つある場合はうまく機能します。たとえば、これはこれ/mysite/index.php?c=home と同じように機能します/mysite/home

これ/mysite/index.php?c=home&m=mymethod はこれと同じように機能し/mysite/home/mymethodます...相対的なリソースをロードすることを除いて。

URL/mysite/home/mymethodは、Web ブラウザーに/mysite/homeではなく の相対パスを残すようです/mysite/。に移動して/mysite/home/mymethod、css、image、または js ファイルを相対パスで読み込もうとすると (たとえば、html は と表示されますcss/site.css)、ブラウザーはパスの先頭に追加home/します。つまり、Web ブラウザーは ...home/css/site.cssの代わりに読み込みを試みcss/site.cssます。要するに、2 番目のパラメーターを指定すると、相対パスがホースされます。

2 番目の uri パラメータを指定すると相対パスが間違っているのはなぜですか?

4

2 に答える 2

1

ブラウザーがコンテンツを要求し、そのコンテンツに (css、画像、js などへの) 相対リンクがある場合、相対 URIベースを決定するのはブラウザー次第です。ブラウザーは、要求した URL を確認することでこれを行います。たとえば、ブラウザのロケーション バーに次のように入力すると:

http://mysite.com/home/mymethod/maybe-a-file.html

また、ファイルから提供される (この例では静的) コンテンツにはmaybe-a-file.html、画像へのリンクが含まれています。

<img src="boo.jpg">

そのため、実際にその画像をリクエストするために、相対 URI ベースが何であるかを判断するのはブラウザー次第です。この例は簡単です。要求された URL を見て、最後のファイル ノードを削除すると、次のようになります。

http://mysite.com/home/mymethod/

したがって、次の場所に画像をロードします。

http://mysite.com/home/mymethod/boo.jpg

十分に単純です。ただし、あなたの場合、ブラウザは次の URL を読み込んでいます。

http://mysite.com/home/mymethod

これは静的ページではありませんが、ブラウザは認識しません。それが知っているのは、返された URL とコンテンツだけであり、次のようなコンテンツを取得します。

<img src="boo.jpg">

そのため、URL を調べてベースを見つけます。

http://mysite.com/home/

したがって、次の場所に画像をロードしようとします。

http://mysite.com/home/boo.jpg

ブラウザは、実際に から提供されているコンテンツについて何も知りません/index.php。それはすべてサーバーの内部で行われ、要求した URL のみを認識し、それ以外は何も知りません。

したがって、これを修正するには、相対パスを絶対パスに変更して、ブラウザーが間違ったベース URI を誤って推測しないようにするか、ベース URI を指定して、ブラウザーが推測する必要がないようにする必要があります。これを行うには、これをページのヘッダーに追加します。

<base href="/" />

またはベースが想定されているものは何でも。

于 2013-10-24T03:36:59.870 に答える
0

http://ellislab.com/codeigniter/user-guide/helpers/url_helper.html

URL ヘルパー$this->load->helper('url')base_url()関数を使用して、サイトのベース パスを取得し、リンクまたは css/js ファイルを含めることができます。

于 2013-10-24T05:22:36.777 に答える