Passenger (mod_rails) 経由で提供される Rails アプリがあり、正規の URL を取得したいと考えています。
すべてのリクエストをhttp://mydomain.com(だから、書き直してhttp://www.mydomain.comにhttp://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に感謝元の投稿このコードの場合