0

次のようなURLを作成するphpページがあります。

vendors/London City/cat-DJ & Entertainment/keywords

以下に示すように、私の.htaccessはこれをリダイレクトします

RewriteRule vendors/(.+)/cat-(.+)/(.+)$ vendors.php?location=$1&category=$2&freetext=$3 [L]
RewriteRule vendors/(.+)/cat-(.+)/(.+)/$ vendors.php?location=$1&category=$2&freetext=$3 [L]

問題1は次のとおりです。vendors.phpファイルで、カテゴリとして「DJ;Entertainment」のみを取得しています。アンパサンドがありません。

問題2は次のとおりです。私の完全な.htaccessファイルを以下に示します... 6つのルールが定義されています。

RewriteRule vendors/(.+)/(.+)/$ vendors.php?location=$1&freetext=$2 [L] 
RewriteRule vendors/(.+)/(.+)$  vendors.php?location=$1&freetext=$2 [L]
RewriteRule vendors/(.+)/cat-(.+)/$ vendors.php?location=$1&category=$2 [L]
RewriteRule vendors/(.+)/cat-(.+)$  vendors.php?location=$1&category=$2 [L]
RewriteRule vendors/(.+)/cat-(.+)/(.+)$ vendors.php?location=$1&category=$2&freetext=$3[L]
RewriteRule vendors/(.+)/cat-(.+)/(.+)/$ vendors.php?location=$1&category=$2&freetext=$3[L]

URLベンダー/ロンドンシティ/猫-DJ&エンターテインメント/キーワードがルール3または4と一致し、vendors.phpにリダイレクトするのはなぜですか?location = $ 1&category = $ 2?

.htaccessはルールを上から始めまで1つずつ処理しますか?

ルール5と6を他のルールの一番上に置くことで、問題を解決しました。正しい修正を行いましたか?

4

2 に答える 2

0

ドキュメントから:

これらのルールが定義される順序は重要です。これは、実行時に適用される順序です。

于 2011-11-26T08:26:41.950 に答える
0

1.URLにスペースやその他の特殊文字を含めるというアイデアはあまり好きではありません。あなたのサイトでそれが可能かどうかはわかりませんが、この種のURLの代わりに

vendors/London City/cat-DJ & Entertainment/keywords

あなたはこれを持っているべきです:

vendors/london-city/cat-dj-and-entertainment/keywords

もちろん、そのためには、データベースでいくつかの追加の変換/ルックアップを実行して、に変換したり、に変換したりする必要london-cityLondon Cityありdj-and-entertainmentますDJ & Entertainment。これは、これらの「from-to」ペアをデータベースに保存することで実行できます。

2.いずれの場合も、ルールの順序が重要です。したがって、より具体的なルールから始めて、より一般的なルールで終わる必要があります。

また、(.+)パターンは、helloと同様に一致する可能性があるため、広すぎhello/pink/kittenます。常に1つのセクション(間のURLの一部/)のみを取得するようにするには、代わりにパターンを使用し([^/]+)ます。これにより、「問題#2」の側面の1つに対処できます。

したがって、次の最適化されたルールを試してください(各ルールは、末尾のスラッシュがある場合とない場合のURLに一致します)。

RewriteRule ^vendors/([^/]+)/cat-([^/]+)/([^/]+)/?$ vendors.php?location=$1&category=$2&freetext=$3 [L]
RewriteRule ^vendors/([^/]+)/cat-([^/]+)/?$ vendors.php?location=$1&category=$2 [L]
RewriteRule ^vendors/([^/]+)/([^/]+)/?$ vendors.php?location=$1&freetext=$2 [L] 

また、URLで指定されているアンパサンドで「category」の値を取得していません。セミコロンしか取得していません。理由は何ですか?

現在、Apacheボックスが隣で実行されていないため、今は確認できませんが、フラグの横にフラグを追加Bまたはフラグを立ててみてください(例)-そのうちの1つが役立つはずです:NEL[L,B]

于 2011-11-26T11:28:41.320 に答える