Apache地址重写

LunaZhang 2011-10-31

1.开启mod_rewrite模块

2.httpd.conf文件中,

<Directory />

OptionsFollowSymLinks

AllowOverrideAll

Orderdeny,allow

Denyfromall

</Directory>

AllowOverride后面的参数改为All

3.在Apache的www目录下建立.htaccess文件

4..htaccess文件内容举例

<IfModule mod_rewrite.c>

RewriteEngineon

RewriteCond%{REQUEST_URI}!^/FOODZ/index.php\w*$

RewriteCond%{REQUEST_URI}!^(.*)admin(.*)$

RewriteCond%{REQUEST_URI}!^(.*)\.js$

RewriteCond%{REQUEST_URI}!^(.*)\.css$

RewriteCond%{REQUEST_URI}!^(.*)\.swf$

RewriteCond%{REQUEST_URI}!^(.*)\.xml$

RewriteCond%{REQUEST_URI}!^(.*)\.jpg$

RewriteCond%{REQUEST_URI}!^(.*)\.gif$

RewriteCond%{REQUEST_URI}!^(.*)\.png$

RewriteCond%{REQUEST_URI}!^(.*)\.ico$

RewriteCond%{REQUEST_URI}!^(.*)\.php$

RewriteCond%{REQUEST_URI}!^(.*)\.html$

RewriteCond%{REQUEST_URI}!^(.*)\.htm$

 RewriteCond %{REQUEST_URI} !^/FOODZ/$

RewriteBase/

RewriteRule^FOODZ/(.*)$FOODZ/index.php?file=menu&op=menu&action=search&resId=$1

</IfModule>

其中  RewriteEngine on 表示打开rewrite功能。

 RewriteCond是url地址重写的规则,规定了哪url重写或者哪些url不重写。

RewriteCond %{REQUEST_URI} !^/FOODZ/index.php\w*$ 表示对主机名+以/FOODZ/index.php开头的url 不进行url重写。由于重写不仅仅是地址栏的网址的重写,也会对页面里的JS、CSS等文件的路径重写,所以为了不对这些文件产生影响,增加一些RewriteCond %{REQUEST_URI} !^(.*)\.js$等规则。

RewriteBase 表示基础目录。

RewriteRule 定义了具体如果重写。RewriteRule前半段是正则表达式,后半段是重写后的地址。后半段中的$+数字自动匹配为前半段中的()中的内容,第几个数字就是第几个括号。

所有配置好以后Apache的服务要重启。

以上是一个基本的URL地址重写,还有很多强大的功能没有发挥出来。

详细的可以参考Apache的官网。

相关推荐

lionelf / 0评论 2020-07-28