现在的位置: 首页 > 综合 > 正文

apache之url rewrite(mod_rewrite)规则

2013年07月30日 ⁄ 综合 ⁄ 共 2064字 ⁄ 字号 评论关闭

1.检测Apache是否支持mod_rewrite
通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。
如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf 文件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。
如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必选独占一行),然后重启apache服务器即可。

2.让apache服务器支持.htaccess

如 何让自己的本地APACHE服务器支持”.htaccess”呢?其实只要简单修改一下apache的httpd.conf设置就可以让 APACHE支 持.htaccess了。打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),用文本编辑器打开后,查找

Options FollowSymLinks
AllowOverride None
改为
Options FollowSymLinks
AllowOverride All

3.建立.htaccess 文件

如果是在windows平台下,刚开始还真不知道怎么建立”.htaccess”文件,因为这个文件实际上没有文件名,仅仅只有扩展名,通过普通方式是无法 建立这个文件的,别着急,马上告诉你三种方法:三种方法都是先建立一个htaccess.txt的文本文件(当然,这个文本文件的名字你可以随便取),然 后有三种方式给这个文件重命名:
(1)用记事本打开,点击文件–另存为,在文件名窗口输入”.htaccess”,注意是整个绿色部分,也就是包含英文引号,然后点击保存就行了。
(2)进入cmd命令 窗口,通过cd切换当刚建立htaccess.txt文件的文件夹,然后输入命令:rename htaccess.txt .htaccess ,然后点击键盘Enter键即可。
(3)通过ftp连接htaccess.txt所在文件夹,通过ftp软件重命名。

4.rewrite规则学习

.htaccess内容如下:

#开启规则
Options +FollowSymLinks
RewriteEngine on
#规则限定于根目录
RewriteBase /

# 如果目标是文件或目录则直接访问,不启用重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 如果访问的域名为http://yoursite.com/* 则均跳转到http://www.yoursite.com/*
# 条件判断语句:如果相当于php中的if,它的作用域为下一行代码,该语句可以嵌套。
# NC 表示不区分大小写
RewriteCond %{HTTP_HOST} ^yoursite.com [NC]
# 重写规则语句:格式为preg1+空格+preg2,表达的意思为符合preg1的路径都跳转到preg2
# [L,R=301] L表示last,即最后一个rewrite规则,如果请求被此规则命中,将不会继续再向下匹配其他规则。
# R的含义是redirect,即重定向,该请求不会再被apache交给后端处理,而是直接返回给浏览器进行重定向跳转。301是返回的http状态码,具体可以参考http rfc文档,跳转都是3XX。
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [L,R=301]

# 所有不以index.php、static ......开头的路径
RewriteCond $1 !^(index\.php|static|static_new|images|css|cache|uploads|thumb|javascript|robots\.txt|user_guide)
# 普通跳转语句,执行效果相当于php的header("location:xxx.php")路径不改变
RewriteRule ([a-zA-Z]{1,}).php$ api/$1.php

demo:

/test.php

<?php
echo "/test.php";
?>

/api/test.php

<?php
echo "api/test.php";
?>

测试:

http://test.teauni.com/test.php

显示结果:

api/test.php

参考资料:
各大开源网站重写规则

http://blog.sina.com.cn/s/blog_5032d3410101528j.html

媲美apache官网的规则解释

http://blog.csdn.net/yangyu112654374/article/details/5260666

【上篇】
【下篇】

抱歉!评论已关闭.