2017-09-04 6 views
7

次のルールはhttpでは動作しますが、httpsでは動作しません。httpsでApacheがクエリ文字列を操作する

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1? [L] 
RewriteRule ^/path/file.html$ https://www.domain.tld/path/file/ [R=301,L] 

なぜ、query_stringの部分がhttpsで機能しないのですか?

+0

は、これらのは、あなたが持っている唯一のルールはありますか? – akond

+0

いいえ、このように301リダイレクトした後、RewriteRule ^/path/file.html $ https://www.domain.tld/path/file/ [R = 301、L] – Giuseppe

+0

'RewriteRule(。*)/ $ 1? [L] '? – akond

答えて

0

質問のコメントに基づいて、ページパラメータがあるときはいつでもクエリ文字列を削除したいと思うようです。このタイプの書き換えルールは、リダイレクトがない限りURLを取り除いたり変更したりしません。したがって、書き換えルールにR=301またはRを追加しないと、クエリ文字列は削除されません。

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1? [R=301,L] 

それとも、代わりに疑問符のQSDフラグを使用することができる場合があります:

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1 [R=301,L,QSD] 
次のクエリ文字列を削除するには私のサーバー上で働いていた、と私のサーバーは、100%HTTPSでのすべて

それとも、このようなものを使用することができる場合があります(302用)

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule .* /? [R=301,L] 

それとも、Rの代わりにR = 301の:

しかし、リダイレクトを使用しない限り、クエリ文字列は削除されませんでした。

0

は本当にあなたが必要とするすべてはあなたがHTTPとHTTPSのために別々のバーチャルホストを使用していて、settignsはわずかだった場合を除き、それは、HTTPではなくHTTPSに働くだろう、なぜ私はよく分からないhttp://httpd.apache.org/docs/current/rewrite/flags.htm

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1 [L,QSD] 

QSDです異なる

Rフラグを使用しない限り、書き換えルールは内部であることに注意してください。 Rフラグを使用すると、ブラウザに別のページが表示され、サーバー/クライアントの完全な往復が発生します。それ以外の場合は、リクエストを変更して通常どおり処理を進めます。

+0

残念ながらQSDフラグでも動作しませんでした – Giuseppe

+0

定義できませんでしたか?ブラウザでURIを調べている場合は、Rフラグを使用しない限り、前述のように変更されません。 Apache(php、python、その他のcgi)のダウンストリームを使用している場合でも、クエリ文字列は引き続き使用できると言っていますか? – pucky124

0

私は.htaccessファイルと本当に強いていないよ、と私は舞台裏で何が起こっているかを説明することはできませんが、私の意見からあなたの.htaccessファイルは次のようになります。

RewriteCond %{QUERY_STRING} page= [NC] 
RewriteRule (.*) /$1? [L] 
RewriteRule ^path/file.html$ https://www.domain.tld/path/file/ [R=301,L] 

それは働きます完全

(愛)を試験
http://example.com?page=1 
https://example.com/?page=1 
http://example.com/path/file.html 
https://example.com/path/file.html 

ためhere

+0

残念ながらこれはうまくいきません – Giuseppe

+0

Ahaha、提案された回答のどれもうまくいかなければ、おそらく他の問題があります。 Apacheを再インストールするか、詳細を入力してください。 Apacheの設定ファイルのどこかに小さなオプションや指示文があると思う人はいないでしょう。 – degr