+ -
当前位置:首页 → 问答吧 → 【估计没有一个人能够做的了这个题。。。。。。。。】

【估计没有一个人能够做的了这个题。。。。。。。。】

时间:2010-07-12

来源:互联网

其实发过一遍,帖子:http://topic.csdn.net/u/20100712/15/202c1135-1979-4499-9498-acc1b11bbdfa.html,文件夹指向二级域名的已经做到了。

现在遇到的问题是 文件夹指向主域名。


服务器和网站的信息:
网站域名:www.aaa.com
网站服务器:Apache Linux (支持htaccess)
网站根目 /public_html/ 下的文件夹总共四个 加一个文件 .htaccess 总共五个东西。
● root -- 存放主站程序
● bbs -- 存放BBS程序
● home -- 存放空间程序
● upload -- 存放上传的文件
● .htaccess -- htaccess 重写的内容。

这个时候.htaccess 里面的内容(全部内容):
PHP code

<IfModule mod_expires.c>
ExpiresByType text/html A1
</IfModule>


<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /

RewriteCond %{HTTP_HOST} ^aaa\.com$ [NC]
RewriteRule ^(.*)$ http://www.aaa.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !bbs.aaa\.com$ [NC]
RewriteRule ^bbs/(.*)$ http://bbs.aaa.com/$1 [L]

RewriteCond %{HTTP_HOST} !home\.aaa\.com$ [NC]
RewriteRule ^home/(.*)$ http://home.aaa.com/$1 [L]

RewriteCond %{REQUEST_URI} !^/root/.*
RewriteCond %{HTTP_HOST} =www.aaa.com
RewriteRule ^(.*) /root/$1


RewriteRule ^opensource/([^\/]+)\.html$ detail.php?filename=$1 [L]
RewriteRule ^cat([a-z]+)-([^\/]+)/?$ search.php?rewritefn=$1&$1=$2&page=$3 [L]
RewriteRule ^cat([a-z]+)-([^\/]+)/([0-9]+).html$ search.php?rewritefn=$1&$1=$2&page=$3 [L]


</IfModule>


ErrorDocument 301 /err.php?e=301
ErrorDocument 403 /err.php?e=403
ErrorDocument 404 /err.php?e=404
ErrorDocument 500 /err.php?e=500






这个时候测试的结果:
● 访问 www.aaa.com/bbs/ 自动跳转到 bbs.aaa.com ,但是如果访问 www.aaa.com/bbs 那么浏览器header 只是 301 而已,并没有执行跳转,发送了一个 301 的头部。
● 访问 www.aaa.com/home/ 自动跳转到 home.aaa.com ,但是如果访问www.aaa.com/home,和访问www.aaa.com/bbs一样,浏览器只是接收到了 header 301 的请求,但是并没有执行跳转。
● 访问 www.aaa.com 的内容却是是 /public_html/root文件夹里面的内容,但是打开 www.aaa.com/root/ 却并没有访问到 /public_html/root/root/ 里面的内容。而是直接访问了 /public_html/root/文件夹里面的内容
● 访问 www.aaa.com/upload/ 里面的内容却仍旧可以打开的。但是按照道理来说 访问www.aaa.com/upload/的内容应该是指向 /public_html/root/upload/ 里面的内容的,因为 upload 文件夹并没有在 /public_html/.htaccess 里面做重写的。



现在需要的是:
◆ BBS 和 HOME的已经做到了
◆ 访问 www.aaa.com 应该得到的内容是 /public_html/root/ 文件夹里面的内容,所以按照道理,访问 www.aaa.com/root/ 应该得到的内容是在 /public_html/root/root/ 文件夹里面,而不是 /public_html/root/ 里面。

这个能够实现吗?

我找了很久,基本上都是这样的粘贴:

RewriteCond %{REQUEST_URI} !^/root/.*
RewriteCond %{HTTP_HOST} =www.aaa.com
RewriteRule ^(.*) /root/$1

但是假如在主域名(www开头)背后输入 /root/ 会发现访问的其实还是 public_html/root/ 里面的东西,而不是 public_html/root/root 里面的东西。

作者: default7   发布时间: 2010-07-12

这种问题最好到 web开发——apache 版面去问,那边专业点

作者: xuzuning   发布时间: 2010-07-13

没错.术业有专攻,你这又不是几行就能看完的问题.

作者: theforever   发布时间: 2010-07-13

学习,这个是我的弱项

作者: kyzy_yy_pm   发布时间: 2010-07-13

应该是你没有正确处理/的问题
1. RewriteRule ^bbs/(.*)$ http://bbs.aaa.com/$1 [L]
应该改成
RewriteRule ^/bbs(.*)$ http://bbs.aaa.com/$1 [L]

这样,访问/bbs/时,就不会301了

2. RewriteCond %{REQUEST_URI} !^/root/.*
RewriteCond %{HTTP_HOST} =www.aaa.com
RewriteRule ^(.*) /root/$1
同样,注意/

RewriteCond %{REQUEST_URI} !^/root.*
RewriteCond %{HTTP_HOST} =www.aaa.com
RewriteRule ^/(.*) /root/$1

作者: icy_csdn   发布时间: 2010-07-14

等待高手。。。

作者: zyl_leilei   发布时间: 2010-07-14

引用 4 楼 icy_csdn 的回复:

应该是你没有正确处理/的问题
1. RewriteRule ^bbs/(.*)$ http://bbs.aaa.com/$1 [L]
应该改成
RewriteRule ^/bbs(.*)$ http://bbs.aaa.com/$1 [L]

这样,访问/bbs/时,就不会301了

2. RewriteCond %{REQUEST_URI} !^/root/.*
Rewrite……


你写的明显错误了哦。
假如存在 www.aaa.com/bbs1/ 那么也会自动跳转到 bbs.aaa.com/1/ 其实是错误的。

作者: default7   发布时间: 2010-07-14

仍旧是无人会啊。

作者: default7   发布时间: 2010-08-07