1

私はalhpa数値であることができる変数のいくつかの異なるセットを持っています。

2つのセットをコメントアウトすると、もう1つのセットが機能します。1セットのみが機能しますが、機能するには3つすべてが必要です。

最初のセットは1つのレベルのみです。

domain.com/index.php?var1a=var1a

2番目のセットは、1つ、2つ、または3つのレベルにすることができます。

domain.com/index.php?var2a=var2a

domain.com/index.php?var2a=var2a&var2b=var2b

domain.com/index.php?var2a=var2a&var2b=var2b&var2c=var2c

3番目のセットは、1つ、2つ、または3つのレベルにすることができます。

domain.com/index.php?var3a=var3a

domain.com/index.php?var3a=var3a&var3b=var3b

domain.com/index.php?var3a=var3a&var3b=var3b&var3c=var3c

htaccessファイルは次のようになります。

RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?var1a=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?var1a=$1 [L]

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?var2a=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?var2a=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?var2a=$1&var2b=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?var2a=$1&var2b=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)([a-zA-Z0-9_-]+)/$ index.php?var2a=$1&var2b=$2&var2c=$3 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?var2a=$1&var2b=$2&var2c=$3 [L]

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?var3a=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?var3a=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?var3a=$1&var3b=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?var3a=$1&var3b=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?var3a=$1&var3b=$2&var3c=$3 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?var3a=$1&var3b=$2&var3c=$3 [L]

テストした後、これが機能しない理由は理解できますが、さまざまなセットを定義する方法を理解できません。

4

1 に答える 1

1

上記のコメントに基づいて、検索 URL は一貫した /search で始まるため、最も対応しやすく、そのルールが最初に実行されます。

RewriteRule ^search/?$ index.php?search=true [L, NC]
RewriteRule ^search/([a-zA-Z0-9_-]+)/?$ index.php?search=true&keyword=$1 [L, NC]
RewriteRule ^search/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?search=true&keyword=$1&keyword2=$2 [L, NC]

/?末尾のスラッシュをオプションにするため、同じルールで一致する場合としない場合があります。

これにより、アフィリエイトと投稿のリンクが残ります。「検索」とは異なり、投稿リンクにはさまざまな開始語 (カテゴリ) があると仮定すると、それらをユーザー名と区別する必要があります。ただし、ユーザー名には 1 つのレベルしかないため、最初に 2 つまたは 3 つのレベルの URL を投稿リンクとしてキャプチャできます。

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?c=$1&m=$2 [L, NC]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?c=$1&m=$2&t=$3 [L, NC]

最後に、カテゴリとユーザー名を区別するための単一レベルの URL については、ユーザー名がより多く、変更されやすい一方で、頻繁に変更されない限られた数の既知のカテゴリが存在する可能性があります。したがって、カテゴリの検索方法が必要であり、一致しないものはデフォルトでユーザー名になります。

カテゴリを検索するには、RewriteMap. RewriteMap のドキュメントを調べて、状況に最適なタイプを判断する必要がありますが、最終的には次のようになります。

#Map is declared in virtual host context, not in .htaccess
RewriteMap categorymap txt:/path/to/file/categories.txt

RewriteCond ^([a-zA-Z0-9_-]+)/?$,${categorymap:$1} ^([^,]+),\1
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?c=$1

RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?affiliate=$1

私は自分自身で RewriteMaps を使用したり、その特定の形式の RewriteConds を使用したりしていないため、微調整が必​​要になる場合がありますが、RewriteCond は、コンマ ( ^([^,]+))までのすべてのキャプチャに対して着信パスを照合し、次にカテゴリマップと照合するように指示するということです。そのキャプチャされたパターンに対して ( \1)。

于 2013-01-23T23:47:57.947 に答える