Apache の仮想ホスト シェナニガンを使用して、1 つの IP アドレスから複数のドメインにサービスを提供するサーバーがあります。www
URL から省略されている場合は、3 つのサイトにリダイレクトする必要があります。
.htaccess
各ドメインのファイルに次のルールがあります。
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
これは 3 つのうち 2 つでは機能しますが、3 つ目は完全に準拠していません。.htaccess
フレームワークではすべてのヒットをルーティングする必要があるため、がヒットしていることはわかっていindex.php
ます...そしてそれは正しく行われています。したがって、それはアクセス許可ではなく、.htaccess
各ドメインで (多かれ少なかれ) 同一です。私はキャッシングについても調べました(それは意味がありませんが...絶望は狂気に道を譲ります!)
何が起こっているのか手がかりがあれば助けてください。
リクエストに応じて、ここに完全なvhost
構成と.htaccess
ファイルがあります...
vhost
構成:
<VirtualHost *:80>
ServerAdmin me@gmail.com
DocumentRoot /var/www/example.com
ServerName www.example.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/example.com>
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
.htaccess
ファイル:
# BEGIN example.com
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [S=40]
####################################################
# If requested URL-path plus ".php" exists as a file
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
# Rewrite to append ".php" to extensionless URL-path
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]
####################################################
# redirect to RoutingHandler
RewriteRule ^.*$ /index.php [NC,L]
</IfModule>
# END example.com
他に 2 つのドメインが同じ方法で設定されていることを覚えておいてください...どちらも問題なく動作します。