1

そのようなURLを生成するZendアプリケーションがあります

http://miapp.com/module/controller/action/params/values

パラメータ(印刷またはダウンロード)を持つ特定の URL を SSL から除外したい

実際には、SSL経由ですべてのリクエストをリダイレクトし、動的URL書き換えを生成するために、この.htaccessパラメータがあります

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-s     
RewriteCond %{REQUEST_FILENAME} !-l     
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off

しかし、印刷またはダウンロードを含む URL を除外するにはどうすればよいですか?

そのようなことを試してみてください:(しかし、リダイレクトループエラーが発生しました

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_REFERER} !^https(.*)/(print|download)(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^(.*)/(print|download)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]
RewriteCond %{REQUEST_FILENAME} !-s     
RewriteCond %{REQUEST_FILENAME} !-l     
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
4

1 に答える 1

2

通常、書き換えルールは Web サーバー内で行われるという誤解があります。これは、書き換えルールにリダイレクトが含まれていない限り当てはまります。リダイレクトは、新しい URL とステータス コード 3xx を含むリダイレクトをブラウザに返します。

2 番目の htaccess では、2 つのリダイレクトがあります。最初のルールは、ブラウザーに「おい、SSL を使用してください。もう一度やり直してください」と伝えます。要求が HTTPS でない場合、新しい URL とともに 301 ステータス コードがクライアントに返された後、接続は終了します。htaccess ファイルで処理される行はこれ以上ありません。ブラウザは、新しいリクエストをサーバーに送信する必要があります。

最初の文が正しく、https を使用せずに Zend Framework で URL を作成した場合は、ボーナスがあります。これを行うと、リンクを含むすべてのリクエストが 301 リダイレクトされるため、基本的に大量のトラフィックが生成されます。つまり、ブラウザによって返されて再送信されます。これを回避するには、Zend で https を使用して URL を作成する必要があります。

次に、2 番目のルールについて説明します。このルールは、ブラウザに「あなたのパスには、HTTPS を必要としない印刷またはダウンロードが含まれています。もう一度やり直してください」と伝えます。上記のように、接続は終了し、htaccess ファイルでそれ以上の行は処理されません。もちろん、この新しいリクエストは、前述のループで終了する最初のルールに頭を悩ませます。

本当に必要なのはこれだけだと思います (テストできません)。print|download を例外として HTTPS 条件に含めます。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_REFERER} !^https(.*)/(print|download)(.*)$ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

ただし、Zend アプリケーションでは、リンクが HTTP のみであることを確認する必要があります。書き換えルールが機能するのではなく、IE が要求します。

于 2012-07-17T14:56:11.053 に答える