1

助けてくれてありがとう。Web アプリ用に Zend Framework をセットアップしましたが、これまで基本的な SSL リダイレクトを使用して正常に動作していました。いくつかのパスを除いて、すべての URL を SSL にリダイレクトしたいと考えています。1 つのパスは正常に機能し、画像ファイルをロードしているだけです。しかし、もう一方のパスはそうではなく、リクエスト引数を必要とする Action を持つ Zend Framework Controller です。

これが現在の作業構成です。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !(/images)
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

上記は、画像を除外して ZF を機能させるために機能しますが、URI パス /wsrv/itemdata 内のものもすべて除外したいので、次の条件を使用してみました。

RewriteCond %{REQUEST_URI} !(/wsrv/itemdata)

/wsrv/itemdata には、次の形式でいくつかのパラメーターが含まれる場合があります。

/wsrv/itemdata/item_nbr/111111/some_other_arg/a-value

私たちの問題は、SSL に向けられた /index.php に常にリダイレクトされることです。フレームワークが機能するには index.php へのリダイレクトが必要ですが、単一のコントローラーとアクション /wsrv/itemdata のみに ssl を使用する必要はありません。

助けていただければ幸いです。ありがとう!

編集 6-4-12: (解決済み! ほとんど) URL の書き換えではなく、Zend Framework のローダーにあるものです。以下のルールを追加し、いくつかのテスト ファイルを使用しました。ルールは機能します。しかし、私のフレームワーク設定の何かがそれをリダイレクトしています。

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !(/images/)
RewriteCond %{REQUEST_URI} !(/wsrv/itemdata/)
RewriteCond %{REQUEST_URI} !(/test/make/)
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

フレームワークを通過する /wsrv/itemdata 行を除いて、上記は機能します。

4

1 に答える 1

0

問題の解決策を見つけました。別のユーザーが投稿したこの質問は役に立ち、関連していましたが、彼のソリューションを機能させることができませんでした:

特定の Zend Frameworks コントローラー/アクションでのみ htaccess https リダイレクト

私の解決策は機能しましたが、1 つの問題を除いて、前進を妨げませんでした。以下にリストされている書き換えルールにより、特定の Zend Framework コントローラーおよびアクション メソッドで SSL 接続を省略し、存在しないものには通常の SSL 接続を強制的に使用させることができます。(基本的に、すべての SSL を強制しますが、パスは 1 つです)

このソリューションの唯一の例外は、送信された URL の末尾の「/」です。末尾のスラッシュを送信しない場合でも、index.php に自動転送されます。とにかく引数を渡す必要があるため、末尾のスラッシュがそこにあるので、うまくいきます。動作: /wsrv/itemdata/ 動作: /wsrv/itemdata/item_nbr/123456/otherarg/otherval 動作しない: /wsrv/itemdata

最終的な複雑な書き換えルールは次のとおりです。

    RewriteEngine On

#if req is normal file, dir
#then pass in request unchanged (show css, js, img, etc, no ZF)
#do not proc more rules
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

#if req is ssl
#   and not wsrv/itemdata
#   and not images
#   and not test/make
# then rewrite req to index.php to use ZF
#do not proc more rules
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !wsrv/itemdata/
RewriteCond %{REQUEST_URI} !images/ 
RewriteCond %{REQUEST_URI} !test/make/ 
RewriteRule ^.*$ index.php [L]

#NOTE: itemdata/ must have trailing / in client requsts
# In other words, requesting /wsrv/itemdata will redirect to index
# I don't know how to fix that yet
# But / is always used anyway because request args are used
# Ex: /wsrv/itemdata/item_nbr/12345678

#if req is NOT ssl
#   and we want wsrv/itemdata/
#then rewrite without ssl to ZF index.php
#do not proc more rules
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} wsrv/itemdata/
RewriteRule ^.*$ index.php [L]

# Last if none above match, check for non-ssl
#if req is ssl
#   and not wsrv/itemdata
#   and not images
#   and not test/make
# then REDIRECT to https:// using same URI
#do not proc more rules
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !wsrv/itemdata/
RewriteCond %{REQUEST_URI} !images/ 
RewriteCond %{REQUEST_URI} !test/make/ 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
于 2012-06-04T21:23:11.493 に答える