`
rainytooo
  • 浏览: 39038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache 2.x 服务器中的URL重写的配置和应用(转)

阅读更多

作者: 北南南北
来自: LinuxSir.Org
摘要: 本文是关于Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的。能过URL别名规则,我们能看到一个干净的URL,比如可以重写为类似静态网页的 地址。比如 LinuxSir.Org 论坛中,每个帖子都有一个静态网页的地址。干净的URL,对于Google搜索引擎来说是极为受用的,能更快的收录。本文只是一个小提示,或者对有些弟兄 有用。

    目录


++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++


1、关于Apache 2.x URL别名的说明和设置;

Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的。能过URL别名规则,我们能看到一个干净的URL,比如可以重写为类似静态网页的 地址。比如 LinuxSir.Org 论坛中,每个帖子都有一个静态网页的地址。干净的URL,对于Google搜索引擎来说是极为受用的,能更快的收录。

这个重写,是通过Apache 2.x 内部实现的,只是表面上把Web应用程序的URL变的干净一点,原始的URL还是一样有效。


1.1 关于rewrite模块的调用;

Apache 2.x 中URL重写,是通过mod_rewrite.so 来实现的,所以您要查看您的Apache 是否已经被编译进去这个模块了,并且在Apache的配置文件httpd.conf 中已经调用了这个模块。在大多数主流发行版中,Apache 2.x 是把rewrite模块已经编入进去了。比如我用的是Slackware。Apache 2.x的配置文件,放在 /etc/httpd 目录下。

在 httpd.conf 中,我们会发现类似如下的一行,是有关rewrite模块的,模块名是 mod_rewrite.so 。

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

LoadModule rewrite_module lib/apache2/modules/mod_rewrite.so

如果前面有#号,您要去掉。对于大多数发行版来说,Apache 2的模块一般是位于如下的两个位置

/usr/lib/apache2/modules


/usr/lib/httpd/modules

如果在httpd中打开调用rewrite_module的设置,查看一下是不是能调用了,要通过 httpd -M的参数来查看;

#/usr/sbin/httpd -M

如果发现有如下一行,说明模块已经能被调用了

rewrite_module (shared)


1.2 设置DocumentRoot的Directory;

在Apache 2.x 中,我们会看到 DocumentRoot设置的一行。这行就是存放网页程序的地方。比如LinuxSir.Org 存放在 /opt/www 目录中。那么我们就要设置 DocumentRoot为如下的。

DocumentRoot "/opt/www"

然后我们再还要对 DocumentRoot做针对性的行为设置。在一般的情况下,httpd.conf 会给一个默认的。如果你要改 DocumentRoot的路径,同时也要改针对DocumentRoot的Directory的设置,也就是

<Directory "DocumentRoot所设置的路径">

比如我们把DocumentRoot的路径改为了 "/opt/www",那我们也要把 DocumentRoot做针对性的行为设置也要改成这个路径。

<Directory "/opt/www">

    Options FollowSymLinks
    #AllowOverride None 注:把这行前面加#号,然后加下面的一行  ,也就是   AllowOverride ALL
    AllowOverride ALL   
    Order allow,deny
    Allow from all

</Directory>

我们把AllowOverride 的参数设置为ALL,表示整台服务器上的,都支持URL规则重写。Apache 服务器要读每个网站下的家目录下的 .htaccess 文件。如果没有这个文件,或者这个文档没有定义任何关于URL重写的规则,则不会有任何效果。在一般的情况下,成熟的Web 服务器应用套件,都支持URL重写的,比如drupal和joomla 。当我们用这些程序时,会发现在安装包中有 .htaccess中有这个文件。我们把Apache配置好后,只是需要在这些程序的后台打开此功能就行了。


1.3 重启httpd服务器;

在一般情况下,在各个发行版中,都有httpd服务器启动脚本,比如

# /etc/rc.d/rc.httpd restart   注:Slackware Linux
# /etc/init.d/apache2 restart  注:ubuntu、Debian 等;
# /etc/init.d/httpd start  注:Fedora 、Redhat、CentOS



2、关于Apache 2.x URL重写规则的应用;

Apache 2.x 的rewrite模块调用和配置比较容易,这并不是目的。在应用为王的年代里,在服务器程序可选择的今天,应用才是王道。现在我就举例,说一下两个应用。一个vbb论坛的URL重写成类似的静态网页地址的,另一个就是drupal的URL地址重写。

关于vbb论坛程序的URL规则重写,我是从国外论坛看到的。可能有的朋友需要,对vbb 3.5或以上版本有效。我测试的是3.6版本,至于在其它版本上能否可行,这个由你来测试。我不敢保证。


2.1 vbb 论坛的URL地址重写配置




首先:在您的论坛程序存放的家目录下,创建一个.htaccess 文件;

内空如下:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^getdaily.html$ search.php?do=getdaily [L]
RewriteRule ^getdaily([0-9]+).html$ search.php?do=getdaily&f=$1 [L]
RewriteRule ^unanswered.html$ search.php?do=process&replyless=1&replylimit=0&dontcache=1     [L]
RewriteRule ^unanswered([0-9]+).html$ search.php?do=process&replyless=1&replylimit=0&dontcache=1&forumchoice=$1&childforums=1 [L]
RewriteRule ^forum([0-9]+).html$        forumdisplay.php?f=$1         [L]
RewriteRule ^forum([0-9]+)-([0-9]+)-([a-z]+)-(.*)-([0-9]+)-(.*).html$ forumdisplay.php?f=$1&page=$2&sort=$3&order=$4&pp=$5&daysprune=$6 [L]
RewriteRule ^forum([0-9]+)-(.*)-([a-z]+)-([a-z]+).html$    forumdisplay.php?f=$1&daysprune=$2&order=$3&sort=$4     [L]
RewriteRule ^announcement([0-9]+).html$     announcement.php?f=$1     [L]
RewriteRule ^announcement([0-9]+)-([0-9]+).html$    announcement.php?f=$1&announcementid=$2 [L]
RewriteRule ^thread([0-9]+).html$     showthread.php?t=$1     [L]
RewriteRule ^thread([0-9]+)-([0-9]+).html$    showthread.php?t=$1&page=$2     [L]
RewriteRule ^getnew.html$ search.php?do=getnew [L]
RewriteRule ^getnew([0-9]+).html$ search.php?do=getnew&f=$1 [L]
RewriteRule ^printthread([0-9]+).html$    printthread.php?t=$1     [L]
RewriteRule ^sendthread([0-9]+).html$    sendmessage.php?do=sendtofriend&t=$1 [L]
RewriteRule ^referthread([0-9]+)-([0-9]+).html$ showthread.php?t=$1&referrerid=$2    [L]
RewriteRule ^lastpostinthread([0-9]+).html$ showthread.php?goto=lastpost&t=$1 [L]
RewriteRule ^newpostinthread([0-9]+).html$ showthread.php?goto=newpost&t=$1 [L]
RewriteRule ^nextnewesttothread([0-9]+).html$    showthread.php?t=$1&goto=nextnewest    [L]
RewriteRule ^nextoldesttothread([0-9]+).html$    showthread.php?t=$1&goto=nextoldest    [L]
RewriteRule ^post([0-9]+).html$     showthread.php?p=$1     [L]
RewriteRule ^post([0-9]+)-([0-9]+).html$    showpost.php?p=$1&postcount=$2    [L]
RewriteRule ^post([0-9]+)-([0-9]+)-([0-9]+).html$ showthread.php?p=$1&page=$2&pp=$3    [L]
RewriteRule ^thread([0-9]+)-([a-z]+).html$ showthread.php?mode=$2&t=$1    [L]
RewriteRule ^post([0-9]+)-([a-z]+).html$ showthread.php?p=$1&mode=$2    [L]




第二:创建一个xml文件;

比如您可以用 vbburlhack.xml ,在这个文件内贴上如下内容;

<?xml version="1.0" encoding="UTF-8"?>



<product productid="danis_seo_optimization" active="1">
<title>Danis Seo Optimization</title>
<description><![CDATA[This is a very quick 'n' simple vBulletin SEO hack. It's easy to apply and it's the one I have been using here on DaniWeb for the past couple of months. I was going to wait until we went vB 3.5 to release it but I might as well do so now ... Disclaim]]></description>
<version>1.0</version>
<codes>
</codes>
<templates>
</templates>
<plugins>
<plugin active="1">
<title><![CDATA[Dani's SEO optimization]]></title>
<hookname>global_complete</hookname>
<phpcode><![CDATA[// do Dani's SEO optimization

global $session;



$search_array = array(

'#<a ([^>]*)href' . preg_quote("=\"forumdisplay.php?$session[sessionurl]f=") . '([0-9]+)' . preg_quote("&amp;page=") . '([0-9]+)' . preg_quote("&amp;sort=") . '([a-z]*)' . preg_quote("&amp;order="). '([a-z]*)' . preg_quote("&amp;pp=") . '([0-9]*)' . preg_quote("&amp;daysprune="). '([^"]*)"#',

'#<a ([^>]*)href' . preg_quote("=\"forumdisplay.php?$session[sessionurl]f=") . '([0-9]+)' . preg_quote("&amp;daysprune=") . '([^"]*)' . preg_quote("&amp;order=") . '([a-z]*)' . preg_quote("&amp;sort=") . '([a-z]*)' . preg_quote("&amp;pp=") . '([0-9]*)' . preg_quote("&amp;page=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"forumdisplay.php?$session[sessionurl]f=") . '([0-9]+)' . preg_quote("&amp;daysprune=") . '([^"^&]*)' . preg_quote("&amp;order=") . '([a-z]*)' . preg_quote("&amp;sort=") . '([a-z]*)"#',

'#<a ([^>]*)href' . preg_quote("=\"forumdisplay.php?$session[sessionurl]f=") . '([0-9]+)' . preg_quote("&amp;daysprune="). '([^"^&]*)"#',

'#<a ([^>]*)href' . preg_quote("=\"forumdisplay.php?$session[sessionurl]f=") . '([0-9]+)' . preg_quote("&amp;page=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"forumdisplay.php?$session[sessionurl]f=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]t=") . '([0-9]+)' . preg_quote("&amp;page=") . '([0-9]*)' . preg_quote("&amp;pp=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]t=") . '([0-9]+)' . preg_quote("&amp;page=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]t=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]goto=lastpost&amp;t=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]goto=newpost&amp;t=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"printthread.php?$session[sessionurl]t=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"sendmessage.php?$session[sessionurl]do=sendtofriend&amp;t=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]t=") . '([0-9]+)' . preg_quote("&amp;goto=next"). '([a-z]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]p=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]p=") . '([0-9]+)' . preg_quote("&amp;page=") . '([0-9]+)' . preg_quote("&amp;pp=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showpost.php?$session[sessionurl]p=") . '([0-9]+)' . preg_quote("&amp;postcount=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]mode=") . '([a-z]+)' . preg_quote("&amp;t=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"showthread.php?$session[sessionurl]p=") . '([0-9]+)' . preg_quote("&amp;mode=") . '([a-z]+)\##',



'#<a ([^>]*)href' . preg_quote("=\"announcement.php?$session[sessionurl]f=") . '([0-9]+)' . preg_quote("&amp;announcementid=") . '([0-9]+)"#',

'#<a ([^>]*)href' . preg_quote("=\"announcement.php?$session[sessionurl]f=") . '([0-9]+)"#',



// sanitizing

'#<a ([^>]*)href\=\"([^"]*)&amp;page=([^"]*).html"#',

'#<a ([^>]*)href\=\"([^"]*)&amp;highlight=([^"]*).html"#',



// other

'#<a ([^>]*)href' . preg_quote("=\"search.php?$session[sessionurl]do=getdaily&amp;f=") . '([0-9]*)"#',

'#<a ([^>]*)href' . preg_quote("=\"search.php?$session[sessionurl]do=getdaily") . '"#',

'#<a ([^>]*)href' . preg_quote("=\"search.php?$session[sessionurl]do=process&amp;replyless=1&amp;replylimit=0&amp;dontcache=1&amp;forumchoice=&amp;childforums=1") . '"#',

'#<a ([^>]*)href' . preg_quote("=\"search.php?$session[sessionurl]do=process&amp;replyless=1&amp;replylimit=0&amp;dontcache=1&amp;forumchoice=") . '([0-9]+)' . preg_quote("&amp;childforums=1") . '"#'



);

$replace_array = array(

'<a \1href="forum\2-\3-\4-\5-\6-\7.html"',

'<a \1href="forum\2-\7-\5-\4-\6-\3.html"',

'<a \1href="forum\2-\3-\4-\5.html"',

'<a \1href="forum\2-\3.html"',

'<a \1href="forum\2-\3.html"',

'<a \1href="forum\2.html"',

'<a \1href="thread\2-\3.html"',

'<a \1href="thread\2-\3.html"',

'<a \1href="thread\2.html"',

'<a \1href="lastpostinthread\2.html"',

'<a \1href="newpostinthread\2.html"',

'<a \1href="printthread\2.html"',

'<a \1href="sendthread\2.html"',

'<a \1href="next\3tothread\2.html"',

'<a \1href="post\2.html"',

'<a \1href="post\2-\3-\4.html"',

'<a \1href="post\2-\3.html"',

'<a \1href="thread\3-\2.html"',

'<a \1href="post\2-\3.html#',



'<a \1href="announcement\2-\3.html"',

'<a \1href="announcement\2.html"',



// sanitizing

'<a \1href="\2-\3.html"',

'<a \1href="\2-\3.html"',



// other

'<a \1href="getdaily\2.html"',

'<a \1href="getdaily.html"',

'<a \1href="unanswered.html"',

'<a \1href="unanswered\2.html"'



);

$output = preg_replace($search_array, $replace_array, $output);]]></phpcode>
</plugin>
</plugins>
<phrases>
</phrases>
<options>
</options>
</product>



第三:从vbb后台登录,点击产品,然后导入这个vbburlhack.xml 文件;

只要导入,就能成功了。效果可参见 http://www.linuxsir.org/bbs

注意: 如果出现错误,就是你的.htaccess 没放对地方,或者权限不对。如果有问题,不要来问我,这个插件不是我写的,是洋人写的,我只是搬过来应用。呵。。。。出问题就去找他们吧。谢谢了~~~~


2.2 drupal 的URL地址重写设置;

drupal就比较简单了,不象vbb一样,要自己来弄,drupal程序本身就提供了.htaccess 文件。在安装程序的目录里就有。我们只是设置一下就能用了。要通过管理员帐号登录。如果您安装的了中文模块的支持,就是定义干净的URL,他要我们来测试 是否能用。如果测试通过,打开就是了。只是点鼠标。如果你没有通过,说明你把.htaccess 文件给丢了,下载一份drupal,把这个文件复制过去就行了。注意是.htaccess ,前面有个小点……


3、关于本文;

本文是在维护 LinuxSir.Org 服务器的过程中,想到Clean URL是比较重要的, 因为这样Google就可以更加有效率的收录网页了。我们可以利用Google的搜索找到我们所需要的东西。在一定程度上,缓解了 LinuxSir.Org 服务器的压力。我们把搜索、邮局让Google来托管,可以减轻我们维护服务器的工作量,感谢Google!


4、修改日志;

2007/11/23 v0.1b 完成,进入修订阶段;


5、参考文档;

apache2 官方文档 httpd.apache.org
vbb 程序参考: 《The quick 'n' dirty ultra simple vBulletin SEO hack》
drupal 参考:drupal.org


6、相关文档;

《关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明》
《简易WWW服务器的架设》
《apache2 安装与配置》

分享到:
评论

相关推荐

    URL重写配置

    在ThinkPHP框架中,实现URL重写主要依赖于Apache服务器上的`.htaccess`文件配置。首先,确保服务器支持URL重写功能,即在`httpd.conf`文件中启用`mod_rewrite.so`模块,并且设置`AllowOverride`为`All`。 1. **启用...

    apache2.zip

    4. **虚拟主机**:Apache2支持虚拟主机,这意味着可以在同一台服务器上运行多个独立的网站,每个网站有自己的域名和配置。 5. **URL重写**:通过mod_rewrite模块,Apache2可以实现URL的动态重写,这在实现SEO友好...

    Apache+HTTP服务器2.X中文说明.rar

    Apache HTTP服务器2.X是世界上最流行的Web服务器软件之一,它提供了高效、稳定且可高度自定义的平台,用于托管各种类型的网站和应用程序。本资源“Apache+HTTP服务器2.X中文说明.rar”显然是一份针对中文用户的详细...

    URL重写指南 - Apache HTTP服务器

    URL重写指南 - Apache HTTP服务器.mht

    tomcat服务器以url重写的方式除去两个opencms

    在OpenCms中,这通常通过配置Apache Tomcat服务器或者使用内建的URL重写机制实现。Apache Tomcat是一个流行的Java应用服务器,用于运行基于Java Servlet和JavaServer Pages(JSP)的应用。 要实现"除去两个opencms...

    apache2.4+tomcat7+mod_jk.so_整合配置

    它支持多种模块,如 `mod_rewrite`(URL 重写)和 `mod_security`(安全防护)。 2. **Tomcat 7**:Tomcat 是一个开源的 Java Servlet 容器,主要用于运行 Java Web 应用程序。Tomcat 7 是第七个主要版本,支持 ...

    Apache服务器配置与管理

    本主题将深入探讨Apache服务器的配置与管理,帮助你掌握如何搭建和优化Web服务。 1. Web服务概述 Web服务是互联网的核心组成部分,它允许通过HTTP或HTTPS协议在客户端(如浏览器)和服务器之间交换数据。Web服务器...

    jsp 动态转静态 URL重写

    在Web开发中,动态URL和静态URL有着不同的特性和应用场景。动态URL通常包含有服务器端脚本语言(如jsp)的参数,而静态URL则更易于理解和优化。本篇文章将详细探讨“jsp动态转静态URL重写”的概念、重要性以及实现...

    Apache开启URL重写功能方法.docx

    成熟的Web应用程序如Drupal和Joomla通常会提供预设的`.htaccess`文件,只需在安装后启用URL重写功能即可。 4. **重启Apache服务器**: - 修改配置后,需要重启Apache服务器使改动生效。重启命令会因Linux发行版而...

    让IIS支持Apache .htaccess 伪静态规则

    Apache的.htaccess文件是配置文件,用于控制Apache服务器的行为,包括URL重写规则。这些规则通常包含在.htaccess文件中,该文件位于网站的根目录或子目录下,可以对特定的目录应用规则。 然而,IIS默认并不支持....

    apache2.4.msi安装版+win7+64位

    2. **模块重构**:Apache 2.4对许多核心模块进行了重构,比如mod_rewrite,使得URL重写规则更加灵活和强大,便于实现动态网站和SEO优化。 3. **事件模型**:新增的“event”多路复用模型,可以在保持连接的同时处理...

    多种服务器url重写规则

    --------------------Apache--------------------- 1、httpd.conf配置文件中加载了mod_rewrite.so模块 2、AllowOverride None 将None改为 All 3、确保URL_MODEL设置为2 4、把url_rewrite文件夹下的.htaccess文件放到...

    如何在Apache 服务器下配置URL 静态化的 Rewrite 规则.docx

    **Rewrite规则**则是Apache服务器上用于实现URL重写的一种方法,它可以将实际请求的URL转换为另一个内部URL。在Apache中,这主要通过`.htaccess`文件或httpd.conf配置文件来实现。 #### 二、Apache服务器下配置URL...

    url重写 iis php web.config

    在Apache服务器上,我们通常使用`.htaccess`文件来配置URL重写规则,它是一个非常灵活的配置文件,可以直接在网站的根目录下编辑。然而,在IIS服务器环境中,我们需要使用的是`.web.config`文件,这是一个XML文件,...

    URL重写URL重写

    URL(统一资源定位符)是互联网上每个资源的唯一地址,而URL重写则是通过服务器配置或者应用程序代码来改变用户在浏览器地址栏中看到的URL,但并不改变实际请求的资源位置。这一技术常用于隐藏复杂的查询字符串,使...

    apache2.2.rar

    对于开发人员和系统管理员来说,理解Apache 2.2的配置文件结构和指令至关重要,这将帮助他们定制服务器行为,满足特定的应用场景需求。同时,熟悉如何使用VC9编译源码,也可以让开发者根据需要自定义构建Apache,...

    URL重写概念和例子

    ### URL重写概念和例子 #### 一、URL重写定义与作用 **URL重写**(Uniform Resource Locator Rewriting),是指在服务器端对原始的URL请求进行转换,使其变为另一种形式,以便更好地满足网站设计的需求。这种转换既...

    urlrewrite url地址重写

    - **Apache mod_rewrite**:Apache服务器的模块,通过配置.htaccess文件实现URL重写。 - **UrlRewriteFilter**:这是一个基于Java的开源过滤器,常用于Spring MVC等Java Web应用中,通过web.xml配置实现URL重写。 ...

Global site tag (gtag.js) - Google Analytics