[建站基础系列] 05. 常用配置之Apache伪静态
伪静态是SEO里面曾经非常重要的一个环节。但在现代爬虫已经足够智能的今天,伪静态究竟占多重分量,这个就还真不好说。不过,即使为了网站域名美观考虑,将网站所有url伪静态化也是有必要的。
基本概念
伪静态的基本概念就不扯了,自己百度去。
但很多同学一上来就开搞伪静态,结果自己都还没有理解其运作原理,所以经常被折磨得焦头烂额都未能搞掂。所以有必要说明一下伪静态的基本原理,我们在配置伪静态的时候,心里始终要明白以下两点:
- 伪静态输入,即服务器将浏览器的静态地址转换成动态参数的过程,譬如
https://www.typechodev.com/news/1.html
转换成https://www.typechodev.com/index.php?c=new&id=1
- 伪静态输出,即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&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."&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&id=1
,再交给PHP程序处理。
所以,我们在配置伪静态的时候,始终要记得有两个地方需要配置,一个是PHP 输出伪静态,一个是Apache 输入伪静态。
Apache伪静态基本配置
一、Typecho输出伪静态
这里以Typecho为例,其他php程序类似,譬如Wordpress、codeigniter等,都能找到类似的开关配置。
登录typecho后台,打开设置
--永久链接
,“启用”地址重写功能即可,如下图:
自此,完成typecho的伪静态输出配置。
二、Apache的输入伪静态(Rewrite)
在上一步中,如果网站根目录不可写,可能会出现如下错误:
可以放心忽略它,我们继续配置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>
为了方便观察差异点,这里附上修改前后对比:
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>
为方便观察,附上修改前后对比视图:
Step 2.同理,如果没有启用rewrite模块,则启动一下,然后重启apache服务。
sudo a2enmod rewrite service apache2 restart
小结
总的来说,配置站点伪静态,始终紧记两点,要同时配置“伪静态输入”和“伪静态输出”,两者是配合着工作的。 对于apache来说,启用伪静态不复杂,但说实在的,Rewrite规则比较复杂,如果想实现复杂的rewrite效果,还真要下些功夫。
下一篇文章我们会介绍nginx的伪静态配置,你会发现,nginx会更加简单~
版权声明:未经书面授权禁止转载、摘编、复制或建立镜像。对既成事实本站将保留所有的权利。
评论已关闭