一、为何需要地址重写
网页地址变化,SEO需要更友好的地址,域名变化等情况下,给客户带来不便,此时最好的办法就是地址重写。
二、在什么地方配置重写
1、在apache主配置文件httpd.conf中;以本地XAMPP为例,修改配置文件: D:xamppapacheconfhttpd.conf ;
2、在httpd.conf里定义的虚拟主机配置中;
如果你在一个Apache中配置了多个站点,就需要在VirtualHost中设置你的地址重写规则。
3、在基于目录的配置文件.htaccess中;
.htaccess文件是针对目录进行配置的一种方法。
Apache在提供一个资源时,会在此资源所在目录中寻找.htaccess文件,如果有,则使其中的指令生效。就类似ASP.net 中每个目录下都可以设置 Web.config 文件,下级目录的覆盖上级目录的配置;
三、重写是如何工作的
首先要确认已经编译加载了 mod_rewrite 模块:
在 D:xamppapacheconfhttpd.conf 文件中,确认下面加载模块的代码没有被注释掉:
LoadModule rewrite_module modules/mod_rewrite.so
当外部请求到达Apache,Apache会调用重写规则中的定义来重写由用户浏览器指定请求的URL,最后被重写的URL如果是重定向,则送交浏览器做再一次请求;如果是代理则把重写后的URL交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。
四、如何重写
以基于目录的配置文件.htaccess来重写为例演示如何重写:
1、假如您对网站内容所在的服务器没有管理员权限,或者您的网站内容放在ISP的服务器上托管,无法改写主配置文件,但是您对Web站点内容所在的目录有写权限,则可以设置自己的.htaccess文件达到同样的目的。但您需要确定主配置文件中对您的网站所在的目录定义了下面的内容,否则您的.htaccess不会工作。 如下的 AllowOverride All 是必须的,否则.htaccess文件不起作用。
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
</Directory>
<Directory "D:/xampp/htdocs">
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
</Directory>
2、在 D:xampphtdocs 目录下建立一个 .htaccess 文件,
.前面没有信息的.htaccess 文件。windows下建立.htaccess的方法请参看这里。
3、.htaccess文件配置演示
实现访问http://localhost:8081/11的请求跳转到 /my/2.php。
RewriteEngine on
RewriteBase /
RewriteRule ^11$ /my/2.php