0

問題は次のとおりです。

パラメータ付きの URL から正規の URL を作成するために、URL の書き換えを実行しています。例えば:

RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam&param2=$1&param3=$2 [QSA,L]

ここで、ページが https プロトコルを使用しているかどうかも確認し、使用していない場合は 301 リダイレクトを行います。

問題: REQUEST_URI を使用すると、Apache が新しい (正規の URL) を認識しないようです。代わりに、REQUEST_URI は index.php?... URL を返します。

これにより、現在の (正規の URL) を取得し、HTTPS を確認し、必要に応じてリダイレクトすることができなくなります。

例えば、

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (somename)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]

(somename) が URI に含まれていないため、まったく機能しません ({REQUEST_URI} には元の URL が保持されていることを思い出してください)。

QUERY_STRING と照合できますが、リダイレクトにより元の URL に移動します

RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} (param1)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]

私はこれに関する解決策をインターネットで過去1時間検索してきましたが、何かを思いつくことができませんでした. 新しい (正規の) URL を保持する環境変数を作成する方法があるのではないかと考えましたが、これを行う方法を見つけることができませんでした。

役立つかもしれない提案はありますか?

4

1 に答える 1

0

(somename) が URI に含まれていないため、まったく機能しません ({REQUEST_URI} には元の URL が保持されていることを思い出してください)。

%{REQUEST_URI}URL ファイル マッピング処理パイプライン中に mod_rewite または他のモジュールを介して行われたマングリングの後の、文字通り現在の URI は正しくありません。あなたが望むのはおそらく次のとおりです%{THE_REQUEST}

RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(somename/[^\ ]*)
RewriteRule ^ https://%{SERVER_NAME}/%1 [R=301,L]

しかし、それは本当に問題ではないと思います。L問題は、ルールを配置した順序と、リダイレクトにフラグがないことです。これはあなたが望むことをするはずです:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam&param2=$1&param3=$2 [QSA,L]
于 2012-10-04T19:55:13.670 に答える