1

index.php?section=products&id=12 のような URL があり、/products/shirt-12 (shirt は製品名) のような URL が必要です。

そこで、製品を追加するときに .htaccess に行を追加する PHP スクリプトを用意しました。1 つの製品が追加された .htaccess は次のとおりです。

RewriteEngine On
RewriteRule /products/shirt-12 /index.php?section=products&id=12

問題は、ブラウザに www.domain.com/product/shirt-12 を書き込むと、スクリプト/画像が含まれず、image-not-loaded-square を調べて、/ から画像を読み込もうとしていたことです。 /images/img.jpgの代わりにproducts/images/img.jpg。この問題を解決するにはどうすればよいですか? DocumentRoot を試しましたが、500 エラーが発生します。私は何をすべきか?

EDIT : また、ブラウザに URL を入れても/index.php?section=products&id=12、URL は書き換えられず、いつものように動作します。

4

2 に答える 2

0

私のお勧めは、mod_rewrite ルールの学習と作成に何時間も浪費し、Web サイトのすべての URL を完璧に売り込もうとするのではなく、Codeigniter http://codeigniter.comや Kohana http:/のような超簡単で超軽量のフレームワークを使用しないことです。 /kohanaframework.orgを開き、その上にウェブサイトを構築します

これらのフレームワークは、土台、構築するための土台を提供し、邪魔にならないようにして、無限の可能性を残します。

于 2012-10-05T10:33:50.313 に答える
0

問題は、ブラウザに www.domain.com/product/shirt-12 と書き込むと、スクリプト/画像が含まれないことです

これは、相対 URI ベースが変更されたためです。相対的なイメージ/css/スクリプトへのリンクがある場合 (つまり、http://またはで始まらない場合)、ブラウザはリソースをリクエストするために、先頭にbase/を追加する必要があります。ブラウザが次の場所に移動した場合:

/index.php?section=products&id=12

ベース URI は/であるため、参照される相対リンクは、単純/にそれらの先頭に追加されます。しかし、ブラウザが見たとき:

/product/shirt-12

ベースURI/product//product/.

/これを修正するには、URI の前にa を追加して、すべての相対リンクを絶対リンクに変更します。または、これをページのヘッダーに追加します。

<base href="/">

また、ブラウザにURLを入れても/index.php?section=products&id=12書き換えられず、いつものように動作します。

もちろん、書き直したわけではありません。ルールはありません。書き換えルールは次のように機能します。

RewriteRule <match> <target> <flags>

着信 URI が何であれ、<match>それが正規表現に一致する場合は に書き換えられ<target>ます。それでおしまい。<target>あいまいな正規表現に戻ることはありません(一体どのように機能するのでしょうか??)。ブラウザの URL アドレス バーに表示される内容が魔法のように変わるわけではありません。正規表現に一致するものを単純に取得し、サーバー上で内部的に<target>.

ブラウザの内容を変更したい場合、それは画像パスとはまったく異なる試練です。

于 2012-10-04T19:00:11.813 に答える