2016-05-13 4 views
1

htaccessファイルに2つのリダイレクトを設定しようとしていますが、動作させることができません。クエリ文字列の有無にかかわらずRewriteEngineを使用したApacheリダイレクト

所望の出力は次のようになります。ユーザーはwww.mywebsite.com/page1に行く

  • 場合、それは
  • ユーザーがwww.mywebsite.com/page1?a=123になった場合/folder/newPageにリダイレクトされます、それは私が試した/folder/anotherPage?a=123

にリダイレクトされますこの

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^/page1$ /folder/newPage [R=301,L] 

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^/page1(.*)$ /folder/anotherPage$1 [R=301,L] 
私のapacheでオンになっているMOD書き換え

RewriteCond %{REQUEST_URI} ^/page1$ 
RewriteRule ^(.*)$ /folder/newPage [R=301,L] 

RewriteCond %{REQUEST_URI} ^/page1$ 
RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^(.*)$ /folder/anotherPage%1 [R=301,L] 

注:

は、私はまた、このような何かを試してみました。

どのように動作させるか考えてください。以下通じ

答えて

1

チェック:

  1. RewriteEngine On
  2. AllowOverrideディレクティブは、あなたのhtaccessファイルが
  3. htaccessファイルは、サーバの設定ファイルとは異なり、大手スラッシュなしのURLを受け取り、またはロードすることができ、すべてのルールの前に存在していますVHostsファイル。
  4. .*と一致するか、文字以上であるため、%{QUERY_STRING} ^(.*)$も空のクエリ文字列と一致します。これを.+に変更します。

最終規則は次のようになります。

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^page1$ /folder/newPage [R=301,L] 

RewriteCond %{QUERY_STRING} ^(.+)$ 
RewriteRule ^page1$ /folder/anotherPage?%1 [R=301,L] 
+0

は 'RewriteEngine on'のは、ファイルの先頭に設定されています。書き直しモードがONで正常に動作しています。約3.これを確認する方法がわからない? – alexmngn

+0

@alexmngn 'RewriteRule ^/page1 $'を 'RewriteRule^page1 $'に変更しました – hjpotter92

+0

私は最初のものが2番目のルールを引き継ぐように見えます... 2番目のルールを引き継ぐような感じです – alexmngn

関連する問題