0

メッセージセンターを表示および処理するための一連のリワートがあります。

RewriteRule ^messages/process/([a-zA-Z_-]+)/([0-9]+)/?$ messages-process.php?do=$1&id=$2 [L]
RewriteRule ^messages/process/ajax/([a-zA-Z_-]+)/?$ messages-process.php?do=$1&ajax=true [L]
RewriteRule ^messages/view/([0-9]+)/?$ messages.php?page=view&id=$1 [L]
RewriteRule ^messages/([a-zA-Z_-]+)/?$ messages.php?page=$1 [L]
RewriteRule ^messages/?$ messages.php [L]

私の質問は、キャッチオールとして機能するルールを設定するにはどうすればよいですか。そのため、誰かが参照した場合/messages/process/でも、必要なパラメーターが設定されていなくても、messages-process.phpが表示されます。

別の見方をすれば、パラメータをオプションにして、書き換えは機能するが、パラメータが欠落するようにするにはどうすればよいでしょうか。

4

1 に答える 1

1

へのリクエスト/messages/process/は、次のルールに一致します。

RewriteRule ^messages/([a-zA-Z_-]+)/?$ messages.php?page=$1 [L]

/messages/process/...したがって、より一般的なルールに一致する前に、以前に一致してルーティングする、より具体的なルールが必要になりますmessages-process.php

これを他のすべてのルールの前に配置すると、その特定のパターンでそれが達成されます。

RewriteRule ^messages/process/?$ messages-process.php [L]

のようにprocess/、同様の書き換えが必要なディレクトリが他にもある場合は、他のディレクトリの前にこのルールを使用してください。後で、より一般的なルールに一致させてはならないものを明示的にリストする必要があります.../messages/thingmessages-thing.php

# Matches /messages/process/ or /messages/otherdirectory/, etc...
RewriteRule ^messages/(process|thing|otherdirectory|somethingelse)/?$ messages-$1.php [L]

一緒に、これは仕事をするはずです:

# Matches /messages/process/ or /messages/otherdirectory/, etc...
RewriteRule ^messages/(process|thing|otherdirectory|somethingelse)/?$ messages-$1.php [L]
RewriteRule ^messages/process/([a-zA-Z_-]+)/([0-9]+)/?$ messages-process.php?do=$1&id=$2 [L]
RewriteRule ^messages/process/ajax/([a-zA-Z_-]+)/?$ messages-process.php?do=$1&ajax=true [L]
RewriteRule ^messages/view/([0-9]+)/?$ messages.php?page=view&id=$1 [L]
# Stuff not matched by the specific rule at the top matches this one...
RewriteRule ^messages/([a-zA-Z_-]+)/?$ messages.php?page=$1 [L]
RewriteRule ^messages/?$ messages.php [L]

アップデート:

URL を/messages/process/trash一般的に書き換えられるようにするには、次のルールの直後にルールが必要です。

RewriteRule ^messages/process/([a-zA-Z_-]+)/([0-9]+)/?$ messages-process.php?do=$1&id=$2 [L]
# Match stuff after /process/whatever which are not followed by digits (which the previous rule matches)
RewriteRule ^messages/process/([a-zA-Z_-]+)(?:/[^0-9]+/?)$ messages-proces.php [L]
于 2013-03-07T15:58:32.193 に答える