apache重写模块学习(2)

下面的一些操作都是在windows下进行的
1.在多个目录中搜索页面

RewriteEngine On
RewriteCond      D:/wamp/wamp/www/m.xxx.cn/c/%{REQUEST_URI} -f
RewriteRule ^(.*) /c/$1 [L]
RewriteCond      D:/wamp/wamp/www/m.xxx.cn/a/%{REQUEST_URI} -f
RewriteRule ^(.*) /a/$1 [L]
RewriteCond      D:/wamp/wamp/www/m.xxx.cn/b/%{REQUEST_URI} -f
RewriteRule ^(.*) /b/$1 [L]

URL是http://m.xxx.cn/b.html,在a目录下是b目录和网站的根目录下都是有b.html这个文件的,但是因为这样的规则,回去访问a目录下的b.html文件
RewriteCond中的%{REQUEST_URI}应该是代表的/b.html,因为%{REQUEST_URI}前面的的那个/去掉也是可以正常起作用的,前面的路径部分好像是一定要写成绝对路径,相对路径我试了下不行,或者是还不知道相对路径的写法应该是怎样写
REQUEST_URI是代表的网址部分的'/b.html'的内容
来测一测
在网站的根目录下的htaccess文件下设置

RewriteEngine On
RewriteRule ^zj http://www.baidu.com [R,L]

当url是m.xxx.cn/zj的时候会实现跳转
改写规则

RewriteRule ^\/zj http://www.baidu.com [R,L]

或者

RewriteRule ^/zj http://www.baidu.com [R,L]

再在网站根目录下的a文件夹下的htaccess文件中设置

RewriteEngine On
RewriteRule ^zj http://www.baidu.com [R,L]

当url为m.xxx.cn/a/zj才会跳转
RewriteRule的^(.*)里面的查找字符串是从当前文件夹之后的字符串,比如
url:http://www.xxxx.com/a/b/c
在网站根目下的hataccess文件的查找字符串是基于a/b/c
在网站根目下的a文件下的hataccess文件的查找字符串是基于b/c
2.虚拟用户主机
描述:
如果需要为用户username支持一个***www.username.host.domain.com***的主页,但不在此机器上建虚拟主机,而是仅用在此机器上增加一个DNS A记录的方法实现。
解决方案:
仅能对包含"Host: "头的HTTP/1.1请求实现。可以使用以下规则集内部地将***http://www.username.host.com/anypath***重写为***/home/username/anypath***

RewriteEngine on
RewriteCond   %{HTTP_HOST}                 ^www\.[^.]+\.host\.com$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^www\.([^.]+)\.host\.com(.*) /home/$1$2

我自己测试的时候是
访问http://www.xxx.baidu.com/index.html实际访问的是根目录下xxx/xxx/index.html,用这个上面的代码不行,会造成死循环,不知道是不是因为环境不一样的原因,我就自己改了下

RewriteEngine On
RewriteCond   %{HTTP_HOST}          ^www\.([a-zA-Z_]*)\.baidu\.com$
RewriteCond   %{REQUEST_FILENAME}   !-f
RewriteRule   ^(.*)                 %{HTTP_HOST}$1          [C]
RewriteRule   ^www\.([^.]+)\.baidu\.com\/?(.*) $1/$1/$2 

加了一句判断,就不会进入死循环了,但是如果访问的文件里面的那个文件不存在的话,还是会进入死循环,例如现在的url是http://www.xxx.baidu.com/index.html,按照上面的规则的话就会去访问根目录下a/index.html,如果文件正常存在的话,可以正常访问,但是如果文件是不存在的,就会进入死循环,不知道有没有更好的方法,使文件不存在的时候不是显示死循环的信息(403)而是进入404页面????

http://apache.jz123.cn/rewrite/index.html

标签: apache, rewrite, url重写

添加新评论