0

私の英語ですみません。ブランドディレクトリのウェブサイトを作っています。ブランドのページにアクセスする前に、次のようなリクエストを使用します。

mydomain.com/fiche.php?id=115

ここで、id はディレクトリ内のブランドの ID です

ブランド ページの構造を変更し、次のリクエストを使用します。

mydomain.com/annuaire.php?type=fiche&id_marq=115

どこidになったid_marq

私は次のようなrewritebruleを使用しようとしています:

RewriteRule ^fiche.php$ http://www.annuaire-sites-officiels.com/annuaire.php?detail=fiche&id_marq=$1 [L,QSA,R=301] 

古いリンクを新しいページにリダイレクトしますが、結果はid_marq値を渡さず、URLは次のとおりです。

http://www.annuaire-sites-officiels.com/annuaire.php?detail=fiche&id_marq=&id=115

&id=もそうです。

私は何を間違っていますか?

4

2 に答える 2

0

正規表現の後方参照の可用性を確認してください。

Apache 後方参照

クエリ文字列をキャプチャする必要があります。[QSA]変更せずに転送するidため、何かに使用しない限り、そのコードは必要ありません。これは永続的なリダイレクトであるため、301 リダイレクトは正しいです失敗したリダイレクトを追加すると、ブラウザーがそのリダイレクトをキャッシュする可能性があるため、動作しているように見えない場合があることに注意してください。

この文字列の一致では、誰かがアスタリスク*や XSS であなたのサイトを悪用するのを防ぐために、数字だけをキャッチしています。

[NC]複数のケースを許可すると、検索エンジンには異なる URL のように見える可能性があるため (SEO に悪い)、コードに and の一致は含めていません。

RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule ^fiche.php$ http://%{HTTP_HOST}/annuaire.php?detail=fiche&id_marq=%1 [R=301,L]
于 2013-05-28T16:43:16.673 に答える
0

あなたのルールはクエリ文字列を評価していないため、idクエリパラメータをキャプチャしていません。

コードを次のように変更します。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^id=([^&]+) [NC]
RewriteRule ^fiche\.php$ /annuaire.php?detail=fiche&id_marq=%1 [R=302,L,QSA,NC]

正常に動作していることを確認したら、 に置き換えR=302ますR=301R=301mod_rewrite ルールをテストしている間は (Permanent Redirect) を使用しないでください。

于 2013-05-28T16:43:37.973 に答える