您的位置:首页 > 其它

RewriteBase: only valid in per-directory config files 解答:

2013-01-01 23:43 1881 查看
呵呵,要实现伪静态必须开启Apache的重写模块,首先要修改http.conf文件,将

#LoadModule rewrite_module modules/mod_rewrite

前面的#去掉就可以了。

然后是针对网站做重写规则,不过这里有两种方法,我来给大家介绍一下^_^ (别丢砖啊!)

直接修改虚拟主机的配置,比如 PHP代码
<VirtualHost 221.130.187.81:80>

**********

DocumentRoot /var/www/html/

ServerName tinico.cn

ServerAlias www.tinico.cn

**********

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule ^(.*)/(search|reg|login|index|links)\.html$ $1/index.php?action=$2

RewriteRule ^(.*)/(index)-([0-9]+)\.html$ $1/index.php?action=$2&page=$3

</IfModule>

</VirtualHost>

其中*号部分省略的内容不在本文讨论范围之内。那么相信懂一点正则表达式规则的朋友已经能很明显的看出写法了。红色部分的$N表示对应于前面匹配规则中的 匹配项,^(.*)/表示的是任意字符,也就是域名了嘛,呵呵,当然你要明确地写出域名也是可以滴!

第二种方法就是写.htaccess文件了,主要是一些朋友没有服务器的管理权限,比如使用虚拟主机的朋友们。但是前提是必须服务器要支持读取.htaccess文件。要让服务器支持的话必须修改http.conf文件,如下 PHP代码
<Directory "/var/www/html/">

Options -Indexes FollowSymLinks

AllowOverride all

</Directory>

<VirtualHost *.*.*.*>

*******

DocumentRoot /var/www/html/

ServerName tinico.cn

ServerAlias www.tinico.cn

*******

</VirtualHost>

重点就是针对某个目录设置AllowOverride属性,当然,我这里为了简便,直接全部开启,也就是上面代码中的AllowOverride all 具体要根据所需权限合适的选择开放的程度,要谈得更详细,请上Google搜索,呵呵这个不适本文讨论的重点。开放了复写服务器配置的功能之后就可以在网 站的根目录下创建一个.htaccess文件了,具体内容如下 PHP代码
RewriteEngine On

RewriteBase /

RewriteRule ^show-([0-9]+)-([0-9]+)\.html$ index.php?action=show&id=$1&page=$2

******

当然,规则和第一种方法是一样的,不过这里可以使用RewriteBase /来设置重写规则的适应范围为当前目录下。那么之后的重写规则就不必像第一种方法那样设置^(.*)/了,那么为什么我在第一种方法中不这样写呢?呵呵因 为第一种方法不能这么写,要是这样写了,apache会告诉你RewriteBase: only valid in per-directory config files,意思就是仅在每个文件夹下的配置文件中使用。

好了,配置完了以后别忘记重起一下apache让配置生效!

像这样配置完了以后你不必再考虑如何生成静态页面了,或者不必每次更新文章之后都要考虑是不是全部页面都重新生成了啊,这对于中小型网站特别实用,当然,大型网站还是想想办法全部生成静态吧,毕竟伪静态要消耗那么一点点服务器的资源,呵呵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: