0

に変換する簡単な mod 書き換えスクリプトを作成しwebsite.com/index.php?var1=1&var2=2&var3=3ましたwebsite.com/index/1/2/3。何らかの理由で機能していないのですが、その理由はありますか?

#RewriteRule ^$ index.php [QSA]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1\.php [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php/$1 [QSA]

RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ comments.php?var1=$1&var2=$2&var3=$3
4

2 に答える 2

1
  • 最初のルールは に書き換えindex/1/2/3ますindex/1/2/3.php
  • 次に、2 番目のルールはこれを次のように書き換えます。index.php/index/1/2/3.php
  • 最後に、最後のルールが一致しません。

に書き換える場合は、クエリ文字列の引数を でキャプチャし、それらを に挿入するwebsite.com/index.php?var1=1&var2=2&var3=3必要があります。website.com/index/1/2/3RewriteCondRewriteRule

RewriteEngine on
RewriteCond %{QUERY_STRING} var1=(.*?)&var2=(.*?)&var3=(.*?)
RewriteRule ^index.php$ /index/%1/%2/%3 [L]

内部的に書き換えるのではなくリダイレ​​クトしたい場合、つまりブラウザーに新しい URL を表示したい場合は、[R,L]RewriteRule フラグとして使用します。

RewriteRule ^index.php$ /index/%1/%2/%3 [R,L]
于 2013-03-30T01:32:16.867 に答える
0

6行目の書き換えでそれがキャッチされ、index.phpに送信されるようです。ファイルとディレクトリが何であるかを知らないとわかりにくいですが、そうではないと思います。httpd.conf にアクセスできる場合は、書き換えログを有効にすることができます。

RewriteLogLevel 8

そして、これをデバッグするのに必要な情報よりもはるかに多くの情報をログに記録します。新しいバージョンの apache では、設定は LogLevel で設定されます。

LogLevel alert rewrite:trace8

これは vhosts または htaccess で許可されている可能性があるため、バージョンのドキュメントで調べてください。

パフォーマンスに深刻な影響を与えるため、これをオンのままにしないでください。

于 2013-03-29T23:08:43.097 に答える