1

この Apache RewriteRule を以下に構成しましたが、HTTP 404 エラーを返さずに次の URL を許可するという問題があります。

http://www.crmpicco.lan/golf/glasgow/play/explore/features/explore/course-features/airshire/parkland/

(これは開発用に使用される単なるローカル URL であり、公開されているわけではありません)

RewriteRule ^golf/([^.]+)/([^.]+)/([^.]+)/$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L]

PHP$_REQUESTスーパーグローバルをダンプすると、次の値が得られます。

[url] => golf/
[city] => glasgow/play/explore/features/explore/course-features
[golf_region] => ayrshire
[golf_category] => parkland

特に、cityは正しくありません。私がやりたいことは、スラッシュの間に文字列を 1 つだけ許可することです。

これを行うように RewriteRule を構成できますか?

Apache 2.2.3 を使用しています。

4

2 に答える 2

1

これを試してみてください。

RewriteRule ^golf/([^\/]+)/([^\/]+)/([^.]+)/$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L]
于 2013-06-20T10:24:30.180 に答える
1

問題は、この正規表現の使用です:

([^.]+)

これは、ドット/ピリオドが見つかるまで、1 文字以上のテキストに一致することを意味します。代わりに次を使用する必要があります。

([^/]+)

これは、スラッシュが見つかるまで、1 文字以上のテキストに一致することを意味します。

変更後のルールは次のとおりです。

RewriteRule ^golf/([^/]+)/([^/]+)/([^/]+)/?$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L,NC]
于 2013-06-20T10:26:50.947 に答える