apache重写模块学习(2)自己的一些记录
2015-01-17 10:24
246 查看
看了下mod_rewrite在各项参数的意义,但是感觉不是很懂,就想通过一些实际的案例来理解具体的细节
下面的一些操作都是在windows下进行的
1.在多个目录中搜索页面
RewriteCond中的%{REQUEST_URI}应该是代表的/b.html,因为%{REQUEST_URI}前面的的那个/去掉也是可以正常起作用的,前面的路径部分好像是一定要写成绝对路径,相对路径我试了下不行,或者是还不知道相对路径的写法应该是怎样写
REQUEST_URI是代表的网址部分的'/b.html'的内容,这时RewriteRule的^(.*)是从url的哪一部分选取的呢?一直很纠结这个
来测一测
在网站的根目录下的htaccess文件下设置
改写规则
我觉得,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
访问http://www.xxx.baidu.com/index.html实际访问的是根目录下xxx/xxx/index.html,用这个上面的代码不行,会造成死循环,不知道是不是因为环境不一样的原因,我就自己改了下
http://apache.jz123.cn/rewrite/index.html
下面的一些操作都是在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'的内容,这时RewriteRule的^(.*)是从url的哪一部分选取的呢?一直很纠结这个
来测一测
在网站的根目录下的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,重写模块学习(1)
- Eclipse IDE 使用技巧 (Eclipse工作空间小技巧)(自己的一些学习笔记和心得,记录下来,备忘录和复习使用)
- apache重写模块学习(3)
- C++ STL ; 一些记录。自己学习用。
- 2018年开始写一些博客来记录自己学习过程
- centos学习:凭什么PHP和apache能够"苟合",编写自己的apache模块
- 记录《自己动手写网络爬虫 》书中涉及的内容学习一些算法
- 自己学习smarty的一些代码 和记录
- 开始学习linux运维,这 4000 里记录一些自己的学习心得
- 整合之前的一些学习记录1(nginx和apache的部署)
- 关于C# webservice的一些学习记录,供自己学习查阅.
- 今年大二,要开始java的学习了,听前辈说记录一下自己的学习过程会有一些好处
- 实习三个月整,记录自己的成长,主要是保留一些这段时间学习flex的链接,方便以后查看
- APACHE 重写的一些 转载 供自己使用
- 希望能经常写自己的技术博客,记录我的一些学习进程
- 今天开始要详细的记录学习sharepoint 的进度和相关的一些资料
- 记录自己的计算机学习旅程(1)
- XSLT 学习记录(一些语法和知识,备忘)
- 最近的学习笔记,记录一些通俗易懂的学习类文章。更像是好资料参与索引。
- 记录一下自己学习程序的过程