永发信息网

apache中VirtualHost和.htaccess不能同时使用?

答案:2  悬赏:0  手机版
解决时间 2021-08-10 23:09
apache2, windows系统,使用的是VirtualHost配置的多站点,为什么可以直接在httpd.conf里面直接写RewriteRule而在.htaccess里面写的就没用???麻烦高手解答一下

配置成这样就能运行,一切正常:
<VirtualHost *:80>
    ServerName abc.com
ServerAlias www.abc.com
    DocumentRoot "E:/PHPDOC/"
ErrorLog "E:/PHPDOC/logs/www.abc.com-error.log"
CustomLog "E:/PHPDOC/logs/www.abc.com-access.log" common
    <Directory "E:/PHPDOC">
Options Indexes FollowSymLinks
        DirectoryIndex index.html index.htm default.htm index.php default.php index.shtml
        AllowOverride Options FileInfo
        Order Deny,Allow
        Allow from all
    </Directory>
RewriteEngine on
RewriteRule ^/(.*)$ /index.php?query=$1
</VirtualHost>

如果把
RewriteEngine on
RewriteRule ^/(.*)$ /index.php?query=$1
单写到.htaccess里面就不行了
最佳答案
说实话我是不懂 test.com.cn    下面是apache 的文档:
必须指定服务器IP地址(和可能的端口)来使主机接受请求,这个可以用NameVirtualHost指令来进行配置。如果服务器上所有的IP地址都会用到,你可以用"*"作为NameVirtualHost的参数。如果你打算使用多端口(如运行SSL)你必须在参数中指定一个端口号,比如"*:80"。请注意,在NameVirtualHost指令中指定IP地址并不会使服务器自动侦听那个IP地址。请参阅设置Apache使用的地址和端口一章获取更多详情。另外,这里设定的IP地址必须对应服务器上的一个网络接口。
下一步就是为每个虚拟主机建立<VirtualHost>段。<VirtualHost>的参数与NameVirtualHost的参数必须是一样的(比如说,一个IP地址或"*"代表的所有地址)。在每个<VirtualHost>段中,至少要有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容位于文件系统的什么地方。
取消中心主机(Mainhost)
如果你想在现有的web服务器上增加虚拟主机,你必须也为现存的主机建造一个<VirtualHost>定义块。这个虚拟主机中ServerName和DocumentRoot所包含的内容应该与全局的ServerName和DocumentRoot保持一致。还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。
比如说,假设你正在为域名www.domain.tld提供服务,而你又想在同一个IP地址上增加一个名叫www.otherdomain.tld的虚拟主机,你只需在httpd.conf中加入以下内容:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
当然,你可以用一个固定的IP地址来代替NameVirtualHost和<VirtualHost>指令中的"*"号,以达到一些特定的目的。比如说,你可能会希望在一个IP地址上运行一个基于域名的虚拟主机,而在另外一个IP地址上运行一个基于IP的或是另外一套基于域名的虚拟主机。
很多服务器希望自己能通过不只一个域名被访问。我们可以把ServerAlias指令放入<VirtualHost>小节中来解决这个问题。比如说在上面的第一个<VirtualHost>配置段中ServerAlias指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:
ServerAlias domain.tld *.domain.tld
这样,所有对域domain.tld的访问请求都将由虚拟主机www.domain.tld处理。通配符标记"*"和"?"可以用于域名的匹配。当然你不能仅仅搞个名字然后把它放到ServerName或ServerAlias里就算完了。你必须先在你的DNS服务器上进行配置,将这些名字和您服务器上的一个IP地址建立映射关系。
最后,你可以把其他一些指令放入<VirtualHost>段中,以更好的配置一个虚拟主机。大部分指令都可以放入这些<VirtualHost>段中以改变相应虚拟主机配置。如果您想了解一个特定的指令是否可以这样运用,请参见指令的作用域。主服务器(main server)范围内的配置指令(在所有<VirtualHost>配置段之外的指令)仅在它们没有被虚拟主机的配置覆盖时才起作用。
这样,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的IP地址。如果能够匹配,它就会查找每个与这个IP地址相对应的<VirtualHost>段,并尝试找出一个与请求的主机名相同的ServerName或ServerAlias配置项。如果找到了,它就会使用这个服务器。否则,将使用符合这个IP地址的第一个列出的虚拟主机。
综上所述,第一个列出的虚拟主机充当了默认虚拟主机的角色。当一个IP地址与NameVirtualHost指令中的配置相符的时候,主服务器中的DocumentRoot将永远不会被用到。所以,如果你想创建一段特殊的配置用于处理不对应任何一个虚拟主机的请求的话,你只要简单的把这段配置放到<VirtualHost>段中,并把它放到配置文件的最前面就可以了。
认真读完的话,你就知道怎么做了
希望对你有帮助
全部回答
主机不支持!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
手机家园里的魔法花园中地花、开花颜色是随机
DNF号被封1年,谁能帮我解封啊,急!!!
寻仙一个徒弟出师能在找个师傅不了
为什么安装的corel draw9不显示色盘
过敏紫癫对鸭绒过敏吗
我是属鸡的!我男友是属猴的!我们配吗?
晚上学习睡的迟早上起的早上课时迷糊请问各种
第八章做死神称号,刷那非常困难的深渊不能组
哪一个国家的邮票值得收藏
QQ三国打旗3人T掉1人其他2人会出去么
为什么PPS无法播放,上面显示音频设备无法回
0876用来做理发店的名字,要怎么解释
PS为甚么我家一玩数码暴龙格斗进化就花屏啊
让胡路区大庆市教育局直属世纪阳光学校(西南
成都租房贵不贵?
推荐资讯
该用户已退出网络,期待重回那天.
请问东莞虎门哪里可以钓鱼,免费的?
李国祥,张曼玉电影摩登仙履奇缘的插曲
有谁是《网球王子》迷?
长治学院音乐系好不?介绍一下
我这个月月经没来,去检查就是盆腔积液其他正
一个关于打赌的问题
江苏城市职业学院怎样?急
samsvngk518手机语音播报文件
硚口区武汉新式棋牌地址是什么,有没有知道的
视频聊天我听不到对方说话,对方可以听到我说
爱到无法自拔时,却发现是没有结果的爱,想放
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?