3

バックグラウンド

にあるCakePHPアプリケーションがあります/m/.htaccessサイトの「サブドメイン」をパラメーターとしてアクションにリダイレクトするルートレベルのファイルを作成したいと考えています。

例: このようなリダイレクトになる書き換えルールを書きたいと思います -

  • http://mysite.myserver.comhttp://myserver.com/m/mysite/
  • http://mysite.myserver.com/homehttp://myserver.com/m/mysite/home
  • http://mysite.myserver.com/foo/bar?baz=truehttp://myserver.com/m/mysite/foo/bar?baz=true

理想的には、このリダイレクトはユーザーに見えないようにする必要があります (URL を変更したくないので、301 を使用したくありません)。

これが私の現在の試みです:

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^(.*)\.myserver\.com$ [NC]
  RewriteRule ^(.*)$ http://myserver.com/m/%1/$1 [L]
</IfModule>

私が知る限り、主な問題は次の$_SERVER['REQUEST_URI']とおりです。

  • http://myserver.com/m/mysite/home直接参照すると、 $_SERVER['REQUEST_URI'] = /m/mysite/home.
  • 上記のファイルをhttp://mysite.myserver.com/home使用して参照すると、 ..htaccess$_SERVER['REQUEST_URI'] = /home

問題

の問題が原因で、ルートが正しく解析されません。目的の場所ではなく$_SERVER['REQUEST_URI']、ユーザーを に誘導しようとしています。/home/m/mysite/home

これが正しく機能するように書き換えルールを変更するにはどうすればよいですか? これを達成する別の方法はありますか?

4

1 に答える 1

4

あなたが求めていること (URL のドメイン名を変更しますが、ブラウザに URL の変更を見せないでください) は、通常のシナリオでは達成できません。ただし、これを可能にするために、Apache を有効にして再起動します。 mod_proxyそれが完了したら、サイトのルート .htaccess で次のコードを使用します。

RewriteCond %{HTTP_HOST} ^([^.]+)\.myserver\.com$ [NC]
RewriteRule !^m/ http://myserver.com/m/sites/%1%{REQUEST_URI} [NC,L,P]
于 2012-05-03T20:53:17.123 に答える