Apache mod_rewrite:一台服务器上有多个域,mod_rewrite拒绝在一台服务器上工作

Apache mod_rewrite:一台服务器上有多个域,mod_rewrite拒绝在一台服务器上工作,apache,mod-rewrite,virtualhost,Apache,Mod Rewrite,Virtualhost,我有一个服务器,它使用Apache的虚拟主机骗局从一个IP地址为多个域提供服务。如果URL中省略了www,则需要将其中三个站点重定向到www 我在每个域的.htaccess文件中都有以下规则: RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} !^www\..+$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 这适用于三家公司中的两家,但第三家公司完全不符

我有一个服务器,它使用Apache的虚拟主机骗局从一个IP地址为多个域提供服务。如果URL中省略了
www
,则需要将其中三个站点重定向到www

我在每个域的
.htaccess
文件中都有以下规则:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
这适用于三家公司中的两家,但第三家公司完全不符合要求。我知道,
.htaccess
正在被命中,因为框架要求所有命中都通过
index.php
路由。。。这是正确的。因此,它不是权限,并且
.htaccess
在每个域上都是相同的(或多或少)。我甚至研究了缓存(尽管这毫无意义……绝望让位于疯狂!)

如果你有什么线索,请帮助我

根据要求,这里是完整的
vhost
config和
.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>

请记住,还有两个域以相同的方式设置。。。它们都是零问题的。

我知道这是一个老问题,但谷歌把我带到这里来是为了寻找同一问题的答案。 在搜索apache的文档后,我发现:

如果此指令设置为“无”,则完全忽略.htaccess文件。在这种情况下,服务器甚至不会尝试读取文件系统中的.htaccess文件


因此,我在
部分将“AllowOverride None”改为“AllowOverride All”,效果很好。

看起来不错。。。除了
www
问题。我已经尽了很大的努力来确保它提供了正确的代码。我知道搞乱vhost配置是多么容易。我甚至尝试了一个明确提到域的regex版本<代码>^domain\.com$。。。不走运。只是
domain.com
,没什么特别的。我完全被难住了。如果你用有关域的完整信息更新你的问题,包括相关的vhost配置和相应的.htaccess文件中的其他代码,也许有人能够找出问题所在。嗯。。。除了蟋蟀什么都没有?我想问题在于“…还有两个其他域以相同的方式设置…它们都可以零问题工作。”这意味着
AllowOverride
在这些域中也设置为
None
。但是,Apache文档包含关于该指令的以下语句:“当该指令设置为无时,.htaccess文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取文件系统中的.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