2

フォームのURLがあります

http://www.site.com/someCompany/someEmployee/name/someName/age/someAge/.../keyN/someValueN/

それらを通常のkey=value形式に変換しようとしていますが、理解できません。

に変換するのを手伝ってくれませんか

http://www.site.com/someCompany/someEmployee?name=someName&age=someAge&...&keyN=someValueN/

基本的に、キーと値はいくつでも存在でき、URLで/ key /value/として指定されます。

多くの例とチュートリアルを読みましたが、可変数のパラメーターを使用したURLの処理について説明しているものはありません。

前もって感謝します、

4

1 に答える 1

0

mod_rewriteがオンになっていることを確認してください。

ドキュメントルートのhtaccessファイルに、次のものを追加します(できれば、そこにある他のルールの上に)。

# Start converting query parameters to path
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+
RewriteCond %{QUERY_STRING} ^([^=]+)=([^&]+)&?(.*)$
RewriteRule ^([^/]+)/(.+)$ /$1/$2/%1/%2?%3 [L]

# done converting, redirect browser
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/(.+)$ /$1/$2 [R=301,L]


# internally rewrite paths to query strings
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)(.*) /$1/$2$5?$3=$4 [L,QSA]

# only someCompany/someEmployee left, pass it through
RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2 [L,R]

これはちょっと複雑に見えるでしょう。/something/somethingelseただし、最初の2つのルールは、指定されたリクエストがクエリ文字列(の後にすべて)を持つ2つのフォルダ(たとえば)に対するものであるかどうかをチェックし?、名前と値のペアを照合してURIパスに構築します。クエリ文字列が空の場合、ブラウザを新しいURLにリダイレクトします(クエリ文字列なし)。これにより、誰かがブラウザにURLを入力したときに次のようになります。

http://www.site.com/someCompany/someEmployee?name=someName&age=someAge&keyN=someValueN

ブラウザがリダイレクトされるため、アドレスバーのURLは次のようになります。

http://www.site.com/someCompany/someEmployee/name/someName/age/someAge/keyN/someValueN/

次に、ルールの2番目のセットはパス階層を取り、最初の2つのフォルダーが何であれ(たとえば/fooCompany/barEmployee)を保持し、各2つのフォルダーをクエリ文字列の名前と値のペアに変更します。基本的に最初の2つのルールの機能を逆にしますが、ブラウザーをリダイレクトしません。URIを内部的に書き換えるだけです。

于 2012-09-11T18:42:36.360 に答える