2016-10-08 16 views
1

は私が、私はしたくないhtaccessの内部リライトは

http://example.com/some/other/path/?q=query 
http://example.com/another/path/?q=query 
http://example.com/yet/another/path/?q=query 

への要求を処理するために同じファイルを希望

http://example.com/somepath/?q=query 

に要求を処理するPHPファイル/var/www/somepath/index.phpを持っparamsはファイルシステム内の複数の場所にphpファイルをコピーします。私は内部書き換えルールを使用する方が良い方法だと思いました。

RewriteRule ^some/other/path /somepath/%{QUERY_STRING} [PT] 

しかし、それは動作しません:ここで私はトップレベル.htaccessファイル/var/www/.htaccessに入れたものです。私は404を得るhttp://example.com/some/other/path/?q=query

同じ.htaccessファイル内に外部書き換えルール(301と302リダイレクト)があるので、mod_rewriteが有効であることがわかっています。

答えて

1

あなたは?q=クエリパラメータで任意のURLを処理するサイトのルートの.htaccessにあなたの非常に最初のルールとしてこのルールを置くことができます。

RewriteEngine On 

RewriteCond %{QUERY_STRING} (^|&)q= [NC] 
RewriteRule^somepath/index.php [L] 
+0

はあなたanubhavaありがとうございました。ユーザーがhttp://example.com/some/other/path/?q=queryを参照すると、URLの「some/other/path」部分が消えるのはなぜですか?書き換えルールの一部として一致させていないため、URLにとどまっていますか? 古いURLは完全に消去されますか?もしそうなら、クエリ文字列も消去されませんか? – George

+0

これは内部書き換えであり、情報が失われることはありません。あなたが '$ _SERVER [" REQUEST_URI "]'をチェックすると '/ some/other/path /?q = query'と表示され、' $ _SERVER ["QUERY_STRING"] 'は' q = query'を表示し、 '$ _SERVER [" SCRIPT_NAME "]'それは書き換えられたパスすなわち '/ somepath/index.php'を表示します – anubhava

関連する問題