0

この質問は明確にするために編集されました:

次のように偽装する「きれいなURL」を作成しようとしています。

mysite.com/index.php?p=1 ==> mysite.com/site_one/index.php

mysite.com/aboutus.php?p=2 ==> mysite.com/site_two/aboutus.php

mysite.com/anypage.php?p=3 ==> mysite.com/site_three/anypage.php

ご覧のとおり、mod_rewriteは、単に「p」変数を所定の疑似ディレクトリに変換する必要があります(このディレクトリは存在しません...これは単なる美的書き換えです)。

明らかに、これは複雑さを生み出します。ユーザーがmysite.com/site_one/index.phpにアクセスすると、mysite.com / index.php?p=1へのバックグラウンド転送が必要です。このバックグラウンド転送により、サーバーエラーが発生するループが発生します。

次のコードを使用して、このループを防止しようとしました。

RewriteCond %{QUERY_STRING} !NON=
RewriteCond %{QUERY_STRING} ^(.*[&?])?p=1([&].*)?$
RewriteRule ^/?(.*)  /site_one/$1 [PT,L]


RewriteCond %{QUERY_STRING} !NON=
RewriteRule ^/?site_one/?(.*)  /$1?NON=1&p=1 [PT,L]

残念ながら、これでもサーバーエラーが発生します。誰かがコードがどこで間違っているかを見ることができますか?

4

2 に答える 2

0

必要に応じて、舞台裏でダミーのクエリ変数を設定できます。次のようなものを試してください。

RewriteEngine On

RewriteCond %{QUERY_STRING} !NON=
RewriteCond %{QUERY_STRING} ^(.*[&?])?p=1([&].*)?$
RewriteRule ^/?page.php  /main_site/ [R,QSA]

RewriteCond %{QUERY_STRING} !NON=
RewriteRule ^/?main_site/?(.*)  /page.php?NON=1&p=1&extra=$1 [QSA,L]

NONそして、phpのget/requestから無視してください。

于 2012-04-19T21:37:47.793 に答える
0

htaccessの方法が役に立たなかったので、私はこれを回避しなければならなくなりました。基本的に、「p」のすべての値を適切なページに転送し、変数「p」を変数「s」に変更しました。次に、「p」の値は「s」が存在する「s」の値と等しいことをWebアプリに伝えました。このコードをサーバーと通信するファイルに入れると、サイトのすべてのページに表示されます。

それは醜くてずさんですが、そもそもそうしなければならない理由です。

于 2012-05-08T18:55:05.410 に答える