apache rewrite多域名为啥不行呢?[win2003server下]

多菜鸟 2008-01-04 02:16:16
方案一:


NameVirtualHost *
<VirtualHost *>
RewriteEngine on
ServerAdmin yourmail@domain.com
DocumentRoot k:/database/
ServerName all-sites

RewriteCond d:/data/%{SERVER_NAME} -d
RewriteRule ^/(.*)$ k:/database/%{SERVER_NAME}/$1 [L]
RewriteRule ^.*$ /index.php [L]
</VirtualHost>


方案二:


NameVirtualHost _default_:80
<VirtualHost _default_:80>
RewriteEngine on
ServerAdmin yourmail@domain.com
DocumentRoot k:/database/.default
ServerName all-sites

RewriteCond d:/data/%{SERVER_NAME} -d
RewriteRule ^/(.*)$ k:/database/%{SERVER_NAME}/$1 [L]
RewriteRule ^.*$ /index.php [L]
</VirtualHost>

以上两种方案为什么都没用?
另外我的另个几个特定站点又是正常滴。
如下设置
NameVirtualHost abc.vvvwz.com:80
<VirtualHost abc.vvvwz.com:80>
ServerAdmin admin@vvvwz.com
ServerName abc.vvvwz.com:80
ServerAlias *.vvvwz.cn main.vvvwz.com
DocumentRoot "k:/database/"
</VirtualHost>

这个是紧随前两方案的后面滴。rewrite不能用(k:/database目录下的对应访问域名的目录已经建好),特定设置(abc.vvvwz.com)的倒是正常。
请熟悉的人指点一二呀,多谢了。
...全文
470 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
多菜鸟 2008-01-11
  • 打赏
  • 举报
回复
rewrite能得到域名的主体部分吗?
比如:http://aaa.bbb.ccc.com
这个域名返回ccc.com就可以了,如此一来,rewrite.txt文件中的域名只留主体部分就OK了。
通过RewriteMap的方法,再加上这个的话,就完美解决泛域名的问题了。

没人参与讨论的话,就只有结帐了。。。
castor_r 2008-01-11
  • 打赏
  • 举报
回复
我也想讨论···

看不明白··就能看懂VHOST的,别的就看不明白了·

自己研究研究·····
Mistruster 2008-01-09
  • 打赏
  • 举报
回复
你要把需要特殊处理的 Rewrite 写在前面
多菜鸟 2008-01-09
  • 打赏
  • 举报
回复
各位兄弟姐妹,又发现一个新东东,哈哈!
利用RewriteMap来搞定路径问题,不过也有美中不足。
不过也贴出来跟大家分享

NameVirtualHost *
<VirtualHost *>
RewriteEngine on
ServerAdmin yourmail@domain.com
DocumentRoot k:/database/

# rewrite with map
#================
RewriteMap lowercase int:tolower
RewriteMap vhost txt:k:/rewrite.txt
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
#下面这一行的意思是,
#前部分:在vhost中查找域名,找到返回其后面的路径,否则就返回|后面的默认
#后部分:检测路径是否为匹配k开头的
RewriteCond ${vhost:%{SERVER_NAME}|k:/database/default} ^(k.*)$
RewriteRule ^/(.*)$ ${vhost:%{SERVER_NAME}|k:/database/default}/$1
</VirtualHost>


rewrite.txt
===============
www.host1.com k:/database/host1
www.host2.com k:/database/host2
www.vvvwz.com k:/database/vvvwz.com/www
bbs.vvvwz.com k:/database/vvvwz.com/bbs


但是这个又有新的问题,泛域名没折了,不是www开头的都会转到k:/database/default里去了,总不能每个都在rewrite.txt加一行吧。
真是郁闷,发现个好的,又有不足之处。大家看看有没有好方法解决这个泛域名问题呢?
多菜鸟 2008-01-09
  • 打赏
  • 举报
回复
to: Mistruster
放在前面试过了,也没有用。真郁闷有加。

另外,重新试了一下这个。
你要检查mod_vhost_alias.so这个文件是否存在,路径是否正确,还有你把NameVirtualHost相关的东西先注释掉
也要看 VirtualDocumentRoot d:/database/%0 中的 d:/database 目录是否存在


发现还是不行。目录没问题,mod_vhost_alias.so这个文件也存在,NameVirtualHost相关的东西已经注释掉。
依然不能启动apache,注释VirtualDocumentRoot d:/database/%0 这个就可以启动,加上就不行。


to: Everybody

RewriteRule ^(.+) k:/database/vvvwz.com/$1 [C]
RewriteRule ^(\w+)\.vvvwz\.com(.*) k:/database/vvvwz.com/$1$2 [L]

这两句中,第一句是不是必要呢?

我的目录结构如下:

K:/
|--database/
| |--www.host1.com/
| |--www.host2.com/
| |--vvvwz.com/
| | |--bbs/
| | |--www/
总哈哈 2008-01-08
  • 打赏
  • 举报
回复
没用过,学习。
多菜鸟 2008-01-08
  • 打赏
  • 举报
回复
经过反复试验,Rewrite似乎不能和多个VirtualHost共存,所以我去掉了后面所有(大概有三个)的virtualHost设置,Rewrite就可以了,哈哈!
发现这个东西越来越有趣了,现在我有另一个方案来解决我的问题,具体如下,但里面些问题,大家给我看看,提点一下在下,多谢了。

NameVirtualHost *
<VirtualHost *>
RewriteEngine on
ServerAdmin yourmail@domain.com
DocumentRoot k:/database

#指定目录中有对应域名的-----OK
RewriteCond k:/database/%{SERVER_NAME} -d
RewriteRule ^/(.*)$ k:/database/%{SERVER_NAME}/$1 [L]

#第一条规则不符合,那就用这条规则
#特定域名的二级,我想用新的规则-----为何不行?好像是找不到文件目录,错在哪里呢?
RewriteCond %{HTTP_HOST} ^\w+\.vvvwz\.com$
#将下面这一行注释掉也不行
RewriteRule ^(.+) k:/database/vvvwz.com/$1 [C]
RewriteRule ^(\w+)\.vvvwz\.com(.*) k:/database/vvvwz.com/$1$2 [L]

#想把这个设置成默认,但用IP访问过来,也不行,是不是前面的没搞定的原因呢?
RewriteRule ^.*$ k:/database/vvvwz.com/index.php [L]
</VirtualHost>



To:Mistruster

你说的问题我再试一下,可能是没有注释NameVirtualHost的原因。
Mistruster 2008-01-08
  • 打赏
  • 举报
回复
你要检查mod_vhost_alias.so这个文件是否存在,路径是否正确,还有你把NameVirtualHost相关的东西先注释掉
也要看 VirtualDocumentRoot d:/database/%0 中的 d:/database 目录是否存在
多菜鸟 2008-01-08
  • 打赏
  • 举报
回复
不好意思,d:/data和k:/database是同一目录,是我放到CSDN的时候手误的问题。
9楼的意思是不是我下面设置的目录不能和这个相同?我试一下看,谢谢!

还有下面这段是不是必须?
<Directory "k:/database">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

</Directory>

在这段之前还这么一段
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>
ATHENA112 2008-01-08
  • 打赏
  • 举报
回复
修改了下第1方案03server测试通过:

NameVirtualHost *
<VirtualHost *>
RewriteEngine on
ServerAdmin yourmail@domain.com
DocumentRoot d:/data
ServerName all-sites

RewriteCond d:/data/%{SERVER_NAME} -d
RewriteRule ^/(.+)$ d:/data/%{SERVER_NAME}/$1 [L]
RewriteRule ^.*$ /index.php [L]
</VirtualHost>

如果你确定d:/data和k:/database下面是一样的话说明你其他配置有问题
多菜鸟 2008-01-07
  • 打赏
  • 举报
回复
LoadModule vhost_alias_module modules/mod_vhost_alias.so
VirtualDocumentRoot d:/database/%0

这招用不起来哟。一加后面这句,就请求失败,APACHE就重启不了
多菜鸟 2008-01-07
  • 打赏
  • 举报
回复
最主要的想学一下,没怎么用过APACHE,另外个原因就是不想移动现有网站的路径。

用vvvwz.com二级域名的网站分布在不一样的目录,不仅仅在k:/database/里

Mistruster 这一招我学一下先?哈哈!!试一下。谢谢!

继续rewrite方式,多谢大家。

Mistruster 2008-01-07
  • 打赏
  • 举报
回复
为什么就认准了 Rewrite 呢
像你这种需求不是正好使用 vhost 吗

LoadModule vhost_alias_module modules/mod_vhost_alias.so
VirtualDocumentRoot d:/database/%0
多菜鸟 2008-01-07
  • 打赏
  • 举报
回复
我想要的结果是,如果有对应域名的目录,就转向那个目录,没有的话,那就用后面的特定的网站,特定网站有好几个,都是vvvwz.com的二级域名。
k:/database/目录中对应域名的目录名称类似于www.aaa.com,
楼上的说我的正则有问题,你帮看看,问题会出在哪里?谢谢!
tantaiyizu 2008-01-05
  • 打赏
  • 举报
回复
你特定 ,可以 ,说明正则写的有问题...
xiaolei1982 2008-01-05
  • 打赏
  • 举报
回复
周一去单位帮你问问去:)
多菜鸟 2008-01-05
  • 打赏
  • 举报
回复
没人喜欢这个问题吗?是分数太低了?

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧