私はZF1アプリケーションの一部として次の構造を持っています-
C:/www/multisite
C:/www/multisite/application
C:/www/multisite/public
C:/www/multisite/client1/uploads
C:/www/multisite/client2/uploads
私は現在、サブドメインごとに次の仮想ホストを持っています-
<VirtualHost *:80>
DocumentRoot "C:/www/multisite/public"
ServerName client1.multisite.dev
Alias /uploads C:/www/multisite/client1/uploads
FallbackResource /index.php
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/www/multisite/public"
ServerName client2.multisite.dev
Alias /uploads C:/www/multisite/client2/uploads
FallbackResource /index.php
</VirtualHost>
サブドメインに基づいて動的にこれを実現したいのですが、その方法がわかりません。
{sub_domain}.multisite.dev
のエイリアスにつながります
Alias /uploads C:/www/multisite/{sub_domain}/uploads
これは可能ですか?
[編集]ソリューションをテストしたので。以下に詳述するように、今では夢のように機能します。正規表現でばかげたスリップアップを作成しましたが、現在は修正されています。
アイデアは、リクエスト内のfqdnをキャプチャし、それを分割するためにRewriteCondを使用することです。正規表現はドメイン名の左端の部分をキャプチャし、%1を使用してRewriteRuleで後方参照されます。また、 'public'ディレクトリを翻訳からエスケープします。これにより、サイトにマップされたすべてのfqdn:に共通のURIパスを使用してアクセスできるようになります(テストを参照)具体例の結果)。
。
RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond %{REQUEST_URI} !^/public/
RewriteCond ${lowercase:%{HTTP_Host}} ^([^.]+)\.multisite\.dev$
RewriteRule ^/(.*) /myApache/runtime/docs/www/multisite/%1/$1
このディレクトリ構造を作成しました。
/myApache/runtime/docs/www/multisite/client1/uploads
/myApache/runtime/docs/www/multisite/client2/uploads
/myApache/runtime/docs/www/multisite/public
各ディレクトリには、index.htmという個別のファイルがあります。 index.htmの内容は、それが配置されているディレクトリパスを示しています。
http://client1.multisite.dev/public/index.htmORからhttp://client2.multisite.dev/public/index.htmは次の結果をもたらします:
Hi!
Served from /myApache/runtime/docs/www/multisite/public/index.htm
See you!
http://client1.multisite.dev/uploads/index.htmにサーフィンすると、次の結果が得られます。
Hi!
Served from /myApache/runtime/docs/www/multisite/client1/uploads/index.htm
See you!
http://client2.multisite.dev/uploads/index.htmにサーフィンすると、次の結果が得られます。
Hi!
Served from /myApache/runtime/docs/www/multisite/client2/uploads/index.htm
See you!
また、WebブラウザーにURLを入力するときに、混合ケースをテストしました。すべてが小文字に変換されます。
ネイティブファイルシステムで大文字と小文字が区別されないWindowsでApacheを実行していることに注意してください。したがって、私は個人的に小文字のURLを見つけましたが、ブラウザーで見たほうが見た目が楽しいので、大文字と小文字を正規化する必要はありません。ただし、大文字と小文字を区別する正規化が必要なファイルシステムでは、完了のためにそれを含めます。
最後に、80以外のポートでApacheを実行すると(つまり、URLでスペルアウトする必要がある)、RewriteRuleの後方参照が壊れることにも注意しました。しかし、私はその解決策を追求しませんでした。
これがあなたが必要とするものと等しいか、十分に近いことを願っています。
Mod_vhost_aliasを試してください: http://httpd.Apache.org/docs/2.2/mod/mod_vhost_alias.html 例:
<VirtualHost *:80>
ServerName apps.mydomain.ltd
ServerAlias *.apps.mydomain.ltd
VirtualDocumentRoot /web/mydomain.ltd/apps/%1/public_html
CustomLog /web/mydomain.ltd/access_Apache.log vhost_log_format
ErrorLog /web/mydomain.ltd/logs/error_Apache.log
ServerAdmin [email protected]
<Directory "/web/mydomain.ltd/apps">
Options FollowSymLinks
Order allow,deny
Allow from all
AllowOverride All
</Directory>
</VirtualHost>