0

Apache の仮想ホスト シェナニガンを使用して、1 つの IP アドレスから複数のドメインにサービスを提供するサーバーがあります。wwwURL から省略されている場合は、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 つのドメインが同じ方法で設定されていることを覚えておいてください...どちらも問題なく動作します。

4

1 に答える 1

0

これは古い質問であることは知っていますが、同じ問題に関する回答を探しているときに、Google が私をここに連れてきました。私が見つけたApacheのドキュメントを検索した後: AllowOverrideディレクティブ

このディレクティブが None に設定されている場合、.htaccess ファイルは完全に無視されます。この場合、サーバーはファイルシステム内の .htaccess ファイルを読み取ろうとしません。

そのため、セクションで「AllowOverride None」を「AllowOverride All」に変更した<Directory /var/www/example.com>ところ、機能しました。

于 2014-02-14T06:13:27.980 に答える