利用mod_rewrite做url规则重写

利用mod_rewrite做url规则重写,使得制作的网站url更简介明了

apache配置

  • 在conf目录的httpd.conf文件中找到
利用mod_rewrite做url规则重写.md
  • 在要支持url rewrite的目录启用配置

通过如下配置使www目录支持url rewrite.

<Directory "/usr/local/var/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
Directory>
  • 在www根目录下添加.htaccess文件,说明rewrite规则

例如我在使用codeigniter框架,想从url中移除index.php,则可以如下配置

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

CodeIgniter配置

如果使用codeigniter框架,则还需如下配置

  • 修改application/config目录下的config.php
//  Find the below code

$config['index_page'] = "index.php"

//  Remove index.php

$config['index_page'] = ""
  • 修改application/config目录下的config.php
//  Find the below code

$config['uri_protocol'] = "AUTO"

//  Replace it as

$config['uri_protocol'] = "REQUEST_URI" 

附录

简单举例说明.htaccess文件如何编写

RewriteEngine on # 开启rewrite
RewriteCond $1 !(index.php|images) #如果文件不为index.php或目录不为images
RewriteRule ^(.*)$ /index.php?page=$1 [L] 
  • $1代表引用RewriteRule中的第一个正则(.*)代表的字符
  • 结尾标识。停止重写操作,并不再应用其他重写规则。防止本条规则被后续规则影响
  • 当访问dmyz.org/about时,实际是访问dmyz.org/index.php?page=about
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /.htm
  • -f用来检测当前值所代表的路径是否是一个常规文件
  • 当访问的文件不是一个常规文件时,转到404.htm页面

FAQ

  • 当配置完rewrite后,可能会显示Forbidden You don’t have permission to access ******, 在httpd.conf中加上Options FollowSymLinks即可,注意不能加Indexes,这个表示显示站点目录