2012年5月26日星期六

Apache Rewrite 实现URL伪静态

一、简述    

    Rewirte主要的功能就是实现URL的跳转。之所以要把URL伪静态化,是因为有利于SEO(搜索引擎的优化),有利于搜索引擎的抓取,提交网站的排名。
    Apache Rewrite的实现有2种方式,一种是基于服务器级的(httpd.conf),另外一种是基于目录级的(.htaccess)。

二、配置

    无论基于哪种方式,要想实现URL重写,都必须开启Apache的mod_rewrite.so模块。
打开Apache目录下的配置文件 httpd.conf,找到下面这一行 

    #LoadModule rewrite_module modules/mod_rewrite.so 

把前面的#号去掉。

1.基于httpd.conf

     如果你设置了虚拟主机,可以按照下面的例子添加相应的 IfModule 片段,当然URL重写规则你要自己写。最后记得重启Apache。

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.hleclerc-PC.ingenidev
    DocumentRoot "D:/wamp/bin/apache/Apache2.2.17/htdocs/blogger"    
    ErrorLog "logs/blogger.com-error.log"
    CustomLog "logs/blogger.com-access.log" common
    ServerName blogger.com
<Directory "D:/wamp/bin/apache/Apache2.2.17/htdocs/blogger">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order deny,allow
    allow from all
    
</Directory>
<IfModule mod_rewrite.c>

    RewriteEngine On
    # Blog
    RewriteRule ^/blog_([0-9]+)_home\.html$ /blog/index.php?blogid=$1 [L]
    RewriteRule ^/blog_([0-9]+)_list\.html$ /blog/blog.php?blogid=$1 [L]
    RewriteRule ^/blog_([0-9]+)_([0-9]+)_list\.html$ /blog/blog.php?blogid=$1&page=$2 [L]

    RewriteRule ^/blog_show_([0-9]+)\.html$ /blog/blog_show.php?id=$1 [L]


    RewriteRule ^/blog_([0-9]+)_photo\.html$ /blog/photo.php?blogid=$1 [L]
    RewriteRule ^/blog_([0-9]+)_([0-9]+)_photo\.html$ /blog/photo.php?blogid=$1&page=$2 [L]

    RewriteRule ^/blog_albums_([0-9]+)\.html$ /blog/photo_albums_show.php?id=$1 [L]

    RewriteRule ^/blog_p_([0-9]+)\.html$ /blog/photo_show.php?id=$1 [L]


    RewriteRule ^/blog_([0-9]+)_myfriends\.html$ /blog/myfriends.php?blogid=$1 [L]
    RewriteRule ^/blog_([0-9]+)_([0-9]+)_myfriends\.html$ /blog/myfriends.php?blogid=$1&page=$2 [L]

    RewriteRule ^/blog_([0-9]+)_messages\.html$ /blog/messages.php?blogid=$1 [L]
    RewriteRule ^/blog_([0-9]+)_([0-9]+)_messages\.html$ /blog/messages.php?blogid=$1&page=$2 [L]

    RewriteRule ^/blog_([0-9]+)_b_([0-9]+)\.html$ /blog/messages.php?blogid=$1 [L]
</IfModule>
</VirtualHost>

2.基于.htaccess

     (1)首先要在你网站的根目录下,建立一个 .htaccess 命名的文件。
     (2)确认你Apache的配置是否已经支持了 .htaccess 的重写


<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.hleclerc-PC.ingenidev
    DocumentRoot "D:/wamp/bin/apache/Apache2.2.17/htdocs/blogger"    
    ErrorLog "logs/ blogger.com-error.log"
    CustomLog "logs/ blogger.com-access.log" common
    ServerName  blogger.com
<Directory "D:/wamp/bin/apache/Apache2.2.17/htdocs/blogger">
    Options Indexes FollowSymLinks  #下面4行代码就是是否启用.htaccess
    AllowOverride all
    Order deny,allow
    allow from all
    
</Directory>
</VirtualHost>

     (3)最后记得重启Apache
     (4).htaccess 文件里面的内容跟 httpd.conf 文件里的内容稍微有点不同,以上面的代码为例子,主要就是每个 URL 前面都少了一个 /   。 .htaccess 方式有一个好处就是每次修改的 URL 规则如果要生效,不必重启 Apache。


    RewriteEngine On
    # Blog
    RewriteRule ^blog_([0-9]+)_home\.html$ blog/index.php?blogid=$1 [L]
    RewriteRule ^blog_([0-9]+)_list\.html$ blog/blog.php?blogid=$1 [L]
    RewriteRule ^blog_([0-9]+)_([0-9]+)_list\.html$ blog/blog.php?blogid=$1&page=$2 [L]

    RewriteRule ^blog_show_([0-9]+)\.html$ blog/blog_show.php?id=$1 [L]

三、有用的资源

    关于上面 Rewirte 的各种语法你可以参考下面的几个链接,都有详细的介绍,通俗易懂,这里不做讲解。

没有评论:

发表评论