Passenger (mod_rails) を使用した Apache Canonical Rewrite

Passenger (mod_rails) を使用した Apache Canonical Rewrite

Passenger (mod_rails) 経由で提供される Rails アプリがあり、正規の URL を取得したいと考えています。

すべてのリクエストをhttp://mydomain.com(だから、書き直してhttp://www.mydomain.comhttp://mydomain.com)。

他の非 Rails アプリでは、mod_rewrite と .htaccess ファイルを使用して次のようにこれを実現します。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.+)mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]

ただし、これは Passenger では機能しないようです。.htaccess ファイルを配置する (パブリック ディレクトリ内)、ディレクティブを移動する (vhost 構成内) など、さまざまな組み合わせを試しましたが、うまくいきません。

どうすればこれを実現できるでしょうか?

答え1

最後の行を次のように置き換えてみてください。

書き換えルール ^(.*)http://mydomain.com%{REQUEST_URI} [R=永続、QSA、L]

それでも失敗する場合は、www.mydomain.com の URL に、mydomain.com への Rewrite のみを実行する別の仮想ホストを使用することをお勧めします。Passenger は mod_rewrite ではうまく動作しません。

お役に立てれば。

答え2

更新: どうやら私は古いバージョンの Passenger を実行していたようです (なぜ見逃したのかわかりません)。現在、私は Passenger 2.2.9 を実行しており、元の書き換えを vhost に配置すると、期待どおり (そして希望どおり) に動作します。

Passenger の古いバージョンの回避策に関する Google グループのディスカッション:http://groups.google.com/group/phusion-passenger/browse_thread/thread/5e019e5d65beb54f

古いバージョンの場合:

を別の仮想ホストとしてホストしwww、リダイレクトする(Jonathan Clarke の提案)

RedirectMatch 301 ^(.*)$ http://mydomain.com$1

アプリ内で書き換えを実行します。

# before_filter :trim_www 
def trim_www 
  if request.subdomains.first == "www" 
    if request.subdomains == ["www"] 
      redirect_to "#{request.protocol}#{request. 
domain}#{request.port_string}#{request.path}" 
    else 
      subdomains = request.subdomains.shift.join(".") 
      subdomains << "." unless subdomains.blank? 
      redirect_to 
"#{request.protocol}#{subdomains}#{request.domain}#{request.port_string}#{r equest.path}" 
    end 
  end 
end 

(RSLに感謝元の投稿このコードの場合

関連情報