1

そのため、.htaccessファイルを使用してURLを書き換えることができましたが、リダイレクトによってURLが台無しになります。たとえば、私はこれを書き直そうとします:

localhost/mysite/public_html/class/5/

これに:

localhost/mysite/public_html/index.php?v=class&id=5

.htaccessファイルで次の行を使用します。

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ ./public_html/index.php?v=$1&id=$2 [L,R]

しかし、ブラウザは私をここにリダイレクトします(私はWindows 7でwampを使用しています):

localhost/C:/wamp/www/mysite/public_html/index.php?v=class&id=5

これは間違っており、403エラーが発生します。私は何をすべきか?

4

4 に答える 4

2

ルールは次のようになります。

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ /public_html/index.php?v=$1&id=$2 [L,R]
于 2012-07-29T00:46:24.227 に答える
2

問題は、置換関数(./public_html/index.php)の./に起因する必要があります。書き換えルールは、^と$の間に配置した正規表現に一致し、それだけを2番目の部分に置き換えます。ルールの前にすでに何らかのrewritecondがあると想定しているので、「。/」を削除してみてください

rewritecondを次のように変更してみてください。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

つまり、要求されたURLがファイルまたはディレクトリでない場合は、それがフォロースルーされ、書き換えが試行されます。

于 2012-07-28T14:18:24.280 に答える
1

以前にどのルールを使用したかはわかりませんが、最小限のhtaccessは次のようにする必要があります。

RewriteEngine On
RewriteBase /mysite/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ /mysite/public_html/index.php?v=$1&id=$2 [L,R]

ルールでの使用は避け、ロケーションパスにはフォルダ./を含める必要があることを忘れないでくださいmysite

于 2012-07-29T00:51:13.173 に答える
1

信じられない。エラーはFirefoxのキャッシュの結果でした。Chromeを使用しましたが、問題ありませんでした。そこで、Firefoxのキャッシュをクリアすると、すべてが正常に機能しました。

于 2012-07-30T11:51:20.140 に答える