在Apache中使用mod_rewrite模块重写URL
Posted Red_Code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Apache中使用mod_rewrite模块重写URL相关的知识,希望对你有一定的参考价值。
如果有使用第三方框架做项目时,url路径是可以同过框架给的方法来设定的(如thinkphp),但如果使用原生php写的项目又想重写url,则可通过apache的一些设置来达到想要的效果。
在更改apache的配置之前,应该先了解一些apache的知识:apache中的Directory标签的作用是用于标记我们如何在特定目录订制apache的行为。该标签里会有一个绝对路径,该路径就是你想订制行为的目录。
总体通过apache修改URL的思路就是,在.htaccess文来中对你想要重写的url地址进行重写。步骤如下:
(1)现在服务器的httpd.conf文件中开启重写.htaccess的权限,将下列代码添加到httpd.conf文件中
<Directory ".htaccess文件所在路径">
AllowOverride All
</Directory>
(2)关于.htaccess文件的存放位置:假如你之前的访问路径为:域名/car_project/index.php
明显,这个路径访问的是car_project文件夹中的index.php文件,所以你要是想重写该路径,你就应该将.htaccess文件放到car_project文件夹中。
(3)之后再将.htaccess文件将里面的重写引擎开启,在. htaccess文件中加入下列代码
<IfModule mod_rewrite.c>
RewriteEngine on
</IfModule>
(4)之后我们需要在IfModule标签中设定“重定向匹配需要应用的URL基本地址”,指令为RewriteBase,例子如下:
RewriteBase /demo/
而我们现在正在使用的地址是:http://localhost/demo/
(5)在IfModule标签里写入RewriteRule指令后,就可以对url进行重写了,比如可以在标签中加入下列代码:
RewriteRule somepage.php otherpage.php
这代表任何人访问somepage.php页面,实际显示的是otherpage.php页面
同理,我们还可以使用正则表达式来对输入URL参数的方式进行重写(在这就不对正则表达式进行展开详解了)
(6)如此,现在httpd.conf文件和.htaccess文件中应该有如下实例代码:
httpd.conf文件中:
<Directory ".htaccess文件所在绝对路径">
AllowOverride All
</Directory>
.htaccess文件中:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /demo/
RewriteRule somepage.php otherpage.php
</IfModule>
以上是关于在Apache中使用mod_rewrite模块重写URL的主要内容,如果未能解决你的问题,请参考以下文章
mod_rewrite 适用于 .htaccess 文件,但不适用于 apache2.conf