[建站基础系列] 05. 常用配置之Apache伪静态

伪静态SEO里面曾经非常重要的一个环节。但在现代爬虫已经足够智能的今天,伪静态究竟占多重分量,这个就还真不好说。不过,即使为了网站域名美观考虑,将网站所有url伪静态化也是有必要的。

基本概念

伪静态的基本概念就不扯了,自己百度去。

但很多同学一上来就开搞伪静态,结果自己都还没有理解其运作原理,所以经常被折磨得焦头烂额都未能搞掂。所以有必要说明一下伪静态的基本原理,我们在配置伪静态的时候,心里始终要明白以下两点:

  1. 伪静态输入,即服务器将浏览器的静态地址转换成动态参数的过程,譬如https://www.typechodev.com/news/1.html转换成https://www.typechodev.com/index.php?c=new&id=1
  2. 伪静态输出,即PHP代码将伪静态地址输出给浏览器识别,譬如echo site_url("news","1")转换成https://www.typechodev.com/news/1.html

第一点很好理解,第二点是什么意思呢?譬如你的php脚本中有如下代码:

<div>
    <a href="<?php "https://www.typechodev.com/index.php?c=news&amp;id=".$id ?>">这是一篇新闻链接</a>
</div>

为了方便控制伪静态和动态链接输出,增加一个公共输出函数:

<?php
    $is_static = true;
    function site_url($ctrl,$id){
        if($is_static){
            return "https://www.typechodev.com/".$ctrl."/".$id.".html";
        }else{
            return "https://www.typechodev.com/index.php?c=".$ctrl."&amp;id=".$id;
        }
    }
?>
<div>
    <a href="<?php echo site_url("news",$id)?>">这是一篇新闻链接</a>
</div>

最终,如果打开了伪静态(即is_static=true),那么浏览器将看到:

<div>
    <a href="https://www.typechodev.com/news/1.html">这是一篇新闻链接</a>
</div>

之后,用户点击上文<a>标签之后,浏览器拿着https://www.typechodev.com/news/1.html去请求服务器,服务器apache再将此链接转换成https://www.typechodev.com/index.php?c=new&amp;id=1,再交给PHP程序处理。

所以,我们在配置伪静态的时候,始终要记得有两个地方需要配置,一个是PHP 输出伪静态,一个是Apache 输入伪静态

Apache伪静态基本配置

一、Typecho输出伪静态

这里以Typecho为例,其他php程序类似,譬如Wordpress、codeigniter等,都能找到类似的开关配置

登录typecho后台,打开设置--永久链接,“启用”地址重写功能即可,如下图:
[建站基础系列] 05. 常用配置之Apache伪静态

自此,完成typecho伪静态输出配置

二、Apache的输入伪静态(Rewrite)

在上一步中,如果网站根目录不可写,可能会出现如下错误
[建站基础系列] 05. 常用配置之Apache伪静态

可以放心忽略它,我们继续配置Apache的伪静态(即Rewrite特性,后文改成Rewrite来说明)。

apache有两种方式配置rewrite重写规则:1. 可以在站点配置config文件中编写; 2. 也可以在站点目录下的.htaccess文件中编写。

方法一,.htaccess文件

配置htaccess文件可能是一种比较简单,并且大家都比较常用的方式,所以首先介绍这种方式。

  • Step 1. 在网站根目录下创建.htaccess文件,并且注意其文件权限。文件内容如下:

    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ /index.php/$1 [L]
    </IfModule>
    
  • Step 2. 为了能使.htaccess生效,需要在apache的站点配置中增加如下内容:

    <Directory /var/www/typechodev.com/> 
        AllowOverride All 
    </Directory>
    

    为了方便观察差异点,这里附上修改前后对比:

    [建站基础系列] 05. 常用配置之Apache伪静态

  • Step 3. 有些系统可能没有默认启用rewrite模块,则需要手动启动一下,之后在重启apache服务。

    sudo a2enmod rewrite
    service apache2 restart

自此,typecho配合apache启用rewrite功能实现伪静态配置已经完成。

方法二,将rewrite规则写入站点配置

上文方法1中,将rewrite规则写入htaccess文件时一种最简单的方式,因为如果你使用的是虚拟主机,可能直接"Step1"就搞掂了。
apache官方文档实际上并不提倡这种方式,因为AllowOverride All其实会有安全隐患,顾名思义,AllowOverride其实是允许站点目录下的其他配置覆盖apache这里的配置,这配置可能会被用于提权,具体请自行google。

  • Step 1.将如下配置加入到站点配置

      <Directory /var/www/typechodev.com/>
        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php/$1 [L]
      </Directory>
    

    为方便观察,附上修改前后对比视图:

    [建站基础系列] 05. 常用配置之Apache伪静态

  • Step 2.同理,如果没有启用rewrite模块,则启动一下,然后重启apache服务。

    sudo a2enmod rewrite
    service apache2 restart
    

小结

总的来说,配置站点伪静态,始终紧记两点,要同时配置伪静态输入”和“伪静态输出”,两者是配合着工作的。 对于apache来说,启用伪静态不复杂,但说实在的,Rewrite规则比较复杂,如果想实现复杂的rewrite效果,还真要下些功夫。

下一篇文章我们会介绍nginx伪静态配置,你会发现,nginx会更加简单~


版权声明:未经书面授权禁止转载、摘编、复制或建立镜像。对既成事实本站将保留所有的权利。