2012-02-07 11 views
0

ユーザを適切なURLにリダイレクトするコントローラファイルを作成しました。このコントローラに特定のトラフィックを誘導し、残りのものには影響を与えません。 http://website.com/shows.php?id=review-1は、コントローラに送信するURLの例です。特定のリクエストのみをRewriteRuleを使用してコントローラファイルにリダイレクトします

私がこれまでに整理したのは、サイト全体のサーバー500サーバーエラーを引き起こす次のRewriteRuleです。 %{QUERY_STRING}状態から-[0-9]+を削除

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\? 
RewriteCond %{QUERY_STRING} (?:^|&)id=review-[0-9]+(?:&|$) [NC] 
RewriteRule^/controller.php [QSA,L] 

は、サイト全体の500サーバーエラーを取り除くが、動作しません。次のRewriteRuleは、私が置き換えようとしているのは問題ありません。

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\? 
RewriteCond %{QUERY_STRING} (?:^|&)id=review-1(?:&|$) [NC] 
RewriteRule^/review/1/super-baseball-2020/? [R=301,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [QSA,L,NC] 

最終結果はhttp://www.website.com/shows.php?id=review-1になり、ユーザが301リダイレクトを扱うに対処しますhttp://www.website.com/controller.php?id=review-1で終わるだろうということです。

+0

ルールは私のシステムで正常に動作します。かっこを追加してみてください。あなたは 'RewriteCond%{QUERY_STRING}(^ |&)id = review- [NC]'を使うことができませんでしたか?それはあなたが望むものよりもはるかに多くマッチしますが、あなたが本当に何か他のもののために使うURLはありません。 – Gerben

答えて

0

;)

6分+テストを見つけることができます。ここでは、動作するはずです何:

RewriteCond %{QUERY_STRING} (^|(.)+&)(id=review-([0-9]+))($|&.*) [NC] 
RewriteRule /shows.php /controller.php?%3 [QSA,L] 

PS:デビンのように、私はなぜ(?:^|&)作品を知っている/得ることはありません...

0

興味深い。 「間違って見ていませんが、私は

RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC] 

が私のシステム上で[OK]をコンパイルすると思われる非キャプチャ指標を出したまでライン

RewriteCond %{QUERY_STRING} (?:^|&)id=review-[0-9]+(?:&|$) [NC] 

はmod_rewriteの中でコンパイルすることができませんでしたそれはあなたのために働くのですか?

+0

'RewriteCond%{THE_REQUEST}^GET \ s/shows \ .php \を試しましたか? RewriteCond%{QUERY_STRING}(^ |&)id = review-1(&| $)[NC] RewriteRule^/controller.php? [QSA、L] 'であり、依然として500のサーバーエラーが発生します。 (注:私は番号範囲の代わりにレビュー1のみを変更しました) –

0

私は500エラーの原因を突き止める必要があると思います。リダイレクトが機能していると思われますが、リダイレクト先のページが失敗しています。あなたは複雑なものに簡単なものを作るしようとしている理由を私はまだ知らない

関連する問題