Apache mod_rewrite:一台服务器上有多个域,mod_rewrite拒绝在一台服务器上工作
我有一个服务器,它使用Apache的虚拟主机骗局从一个IP地址为多个域提供服务。如果URL中省略了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] 这适用于三家公司中的两家,但第三家公司完全不符
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