0

やあ。私はmod_rewriteを初めて使用し、次のことを実行できるかどうか疑問に思っていました。

RewriteRule ^([^/]*)$ index.php?slug=$1

このルールはindex.phpのみを指しますが、特定のスラッグを別のスクリプトに向ける別のルールを実行したい場合は、

RewriteRule ^a-new-page$ different.php

最初のルールは、入力されたものはすべてインデックスを指す必要があると宣言しているため、これは機能しません。

その特定のスラッグに新しいルールを強制する方法はありますか?

4

1 に答える 1

1

はい、可能です。そのような特定のルールをジェネリック/ブロード ルールの前に配置するだけです(ルールが宣言される順序が重要です)。

RewriteRule ^a-new-page$ different.php
RewriteRule ^([^/]*)$ index.php?slug=$1

また、広範なルールにも注意してください -- 書き換えループに入る可能性があります (書き換えた後、新しい URL が次の反復に入ります。ルールが正しく記述されていない場合、無限ループに入る可能性があり、Apache は強制的に終了する必要があり、ユーザーは代わりに 500 エラー ページを参照してください)。より良いルールは次のとおりです。

# specific rule
RewriteRule ^a-new-page$ different.php [L,QSA]

# broad rule (will be triggered if requested resource is not a file or directory) 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ index.php?slug=$1 [L,QSA]
  • [L]このルールが一致する場合、Apache に書き換えを停止するように指示します
  • [QSA]クエリ文字列を新しい URL に追加するよう指示します (トラッキング データ、ページ パラメータなどの URL パラメータがある場合に便利です)。

便利なリンク: http://httpd.apache.org/docs/current/rewrite/

于 2011-07-04T14:39:38.080 に答える