0

get変数をフラットリンクとして表示しようとしています。これから変更したい:

http://mydomain.com/index.php?page=shop&var1=hat&var2=10

http://mydomain.com/index.php/shop/hat/10

変数の数は決まっていないので、var1、var2、...etcを使用することに注意してください。

[編集]私はすでに部分的に機能するスクリプトを持っていますが、最大3つの変数でのみ機能します

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3&var3=$4 [L]
4

2 に答える 2

2

したがって、最初にmod_rewriteが次のように機能することを覚えておいてください。

http://mydomain.com/index.php/shop/hat/10

(クライアントタイプ)はに書き換えられます

http://mydomain.com/index.php?page=shop&var1=hat&var2=10

(クライアントに提供されるもの)が、必ずしも後者のように表示されるとは限りません。(リダイレクトしない限り)

したがって、ここでフォーマットが完全に記述されていると仮定します。

RewriteRule ^index\.php/([^/]+)/([^/]+)/([0-9]+)$ /index.php?page=$1&var2=$2&var2=$3

良いはずです。

編集:

ところで!変数の可変数は考慮していません。それはmod_rewriteで処理されるべきではないと思います。おそらくベストショットはRewriteRule index.php/(.*) /index.php?call=$1、スクリプトを使用して/delimiterを使用して展開することです。

AFAIKのみの変数の数をすでに知っている場合にのみ、それを行うことができます。

于 2011-04-14T09:22:34.450 に答える
0

すべてのリクエストを直接index.php(ブートストラップと呼ばれる)に送信し、スクリプトに変数を解析させることができます。

これがZendFrameworkで行われる方法です、あなたはそれを見る必要があります。ZFには、他にも利用できるグッズがたくさんあります。

これは、ZFを利用したWebサイトを使用しているvhostの1つからの書き換えブロックです。

    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI}      !^/favicon.ico
    RewriteRule ^.*$ index.php [NC,L]
于 2011-04-14T09:57:33.197 に答える