我们把我们的 .htaccess文件放到网站的跟目录下了;
.htaccess文件的内容如下:
RewriteCond %{HTTP_HOST} ask.xxoo.com
RewriteRule ^(index.html)?$ /ask/
RewriteRule ^(.*)list-([0-9]+)-([a-z]+)\.html$ $1/ask/list.php?catid=$2&action=$3
RewriteRule ^(.*)show-([0-9]+)\.html$ $1/ask/show.php?id=$2
RewriteCond %{HTTP_HOST} space.xxoo.com
RewriteRule ^(index.html)?$ /forum/forum.php (注:此处dx系统的二级域名设置错误,少了一步,空间,论坛的二级域名设置错误,上面的问答模块二级域名设置没有错误,请看教程四)
错误原因:原来我设置错误的原因是我想直接通过url重写来做空间、论坛的二级域名设置,但是dx装在根目录的/forum/文件夹里。这样也可以设置二级域名,但会报错,比如,论坛虽然可以过于,但是发帖,等操作连接还是错误的,会自动吧安装目录添加到url中。处处出错,其实一开始我走的道路都是错误的。
上面只做了问答模块和空间模块的url重写。我们来分析一下代码。
上面的代码中有两个 RewriteCond 段,意思是一个url地址会于RewriteCond 后面的正则匹配,如果成功则与对于RewriteCond 下的RewriteRule 进行在匹配,如果还能配的上url重定向的 RewriteRule 第二个参数里的url地址了,
url解析流程是这样的:我们咋地址栏中输入 ask.xxoo.com ,域名泛解析到我们规定的ip地址也就是网站上,网站启用url重写来过滤url地址,过滤ask.xxoo.com被第一个RewriteCond命中,然后再与这个RewriteCond下面所属的3个RewriteRule匹配,被第一个RewriteRule命中,命中返回的是/ask/ 所以ask.xxoo.com被重定向到了ask.xxoo.com/ask/文件夹了
分析代码:
RewriteCond 后面的 %{HTTP_HOST} 是域名
RewriteCond %{HTTP_HOST} space.xxoo.com 表示地址栏中的域名是否等于space.xxoo.com这里也可以使用正则 如:RewriteCond %{HTTP_HOST} space([1-9]).xxoo.com 这匹配的url包含了space1.xxoo.com space2.xxoo.com space2.xxoo.com .......space9.xxoo.com 这9个域名
RewriteRule ^(index.html)?$ /ask/ 匹配的是网站但域名ask.xxoo.com或ask.xxoo.com/index.html这两个地址: 重定向的是ask.xxoo.com/ask
RewriteRule ^(.*)list-([0-9]+)-([a-z]+)\.html$ $1/ask/list.php?catid=$2&action=$3
匹配地址包含
ask.xxoo.com/list-3-all.html 重定向的是ask.xxoo.com/ask/list.php?catid=3&action=all
ask.xxoo.com/list-45-high.html 重定向的是ask.xxoo.com/ask/list.php?catid=45&action=hight
RewriteRule ^(.*)show-([0-9]+)\.html$ $1/ask/show.php?id=$2
匹配地址包含
ask.xxoo.com/show-3.html 重定向的是ask.xxoo.com/ask/show.php?id=3
ask.xxoo.com/show-21.html 重定向的是ask.xxoo.com/ask/show.php?id=21
。。。。。
总结:
RewriteRule 规则形式是:
RewriteRule 正则配表达式 url重定向地址 重定向地址中的参数都是通过正则用的引用来处理 :
RewriteCond 第一个参数中用到的 %{ NAME_OF_VARIABLE } ,服务器变量。 变量的名字如下表(分类显示)