1

例:
google.com/en/game/game1.htmlは google.com/index.php?p1=en&p2=game&p3=game1.html
である必要があり ます。URL を分割して index.php に "/" の部分を送信するにはどうすればよいですか?


4

1 に答える 1

6

これは、クエリパラメータが固定長の場合にのみ実現できます。それ以外の場合は別の方法がありますが、アプリケーションでパスを解析する必要があります。

固定長の実装

次のルールは、3つのURL部分すべてに一致し、それらを名前付きクエリ引数としてindex.phpに書き換えます。

RewriteRule ^([^/]+)/([^/]+)/(.+)$ index.php?p1=$1&p2=$2&p3=$3

これは書き直します:

/en/game/game1.html

に:

/index.php?p1=en&p2=game&p3=game1.html

不明な長さの実装

# Don't rewrite if file exist. This is to prevent rewriting resources like images, scripts etc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?path=$0

これは書き直します:

/en/game/game1.html

に:

/index.php?path=en/game/game1.html

次に、アプリケーションでパスを解析できます。


編集: )URLの最初のレベルが2文字で構成されている場合にのみ書き換えルールが一致するようにするには、次のようにします。

RewriteRule ^([a-zA-Z]{2})/([^/]+)/(.+)$ index.php?p1=$1&p2=$2&p3=$3

不明な長さの実装に対しても実行できます。

RewriteRule ^[a-zA-Z]{2}/ index.php?path=$0
于 2013-03-12T12:55:14.213 に答える