EndlessLethe原创文章,转载请注明: 转载自小楼吹彻玉笙寒
本文链接地址: 开启WordPress伪静态
前言
伪静态指的是将网站传统的www.localhost.com/p/4684401.html的文章地址,改为和内容相关的www.localhost.com/wordpress-url-rewrite.html。
那既然伪静态作为对seo很有帮助的方式,作为有志之士的我怎么能不做呢?所以在域名审核下来前,我已经做好了文章的固定连接。
当我的域名通过审核,我在修改“站点域名”的时候就顺理成章地想把www.localhost.com/wordpress后面的/wordpress也去掉,谁知道发生了一个意料之外的bug…我的WordPress固定链接一直不能使用,文章页面一直报404错误。我也是为了解决这个问题熬了几天夜。
下面我先会描述正常的配置流程,最后再讲述我的debug流程。
对于网站seo的其他优化方法,见我的另外一篇文章“网站SEO配置教程”。
原理讲解
Apache mod_rewrite
下面是Apache mod_rewrite官方文档的描述。1
mod_rewrite 提供了基于正则表达式规则动态修改传入的请求的 URL 的方法。 这允许你以自己喜欢的任意方法映射任意 URL 到你的内部 URL 结构。
phpMyAdmin安装教程中已有Apache访问权限的配置。为了让mod_rewrite正常运行,我们需要开启mod_rewrite模块并设置Options参数。2
.htaccess
有时候,我们不想因为修改重写规则而反复对apache的http.conf进行修改,所以我们使用.htaccess(分布式配置文件)来达到我们的目的。.htaccess提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。3
However,一旦我们使用.htaccess,那么Apache每次有外部访问/www/htdocs/example文件夹时,Apache都会查询
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
所以Apache官方文档强烈建议不使用.htaccess。4
.htaccess语法和机制我们在这里暂且不讨论,因为这里只是.htaccess最简单的使用。在“(.htaccess的高级使用)[]”中有详细讲解。
基本配置
- 复制/wordpress文件夹下的”index.php”到/html下,并修改
require( dirname( __FILE__ ) . './wordpress/wp-blog-header.php' );
为
require('./wordpress/wp-blog-header.php');
5 6 因为Apache访问权限已经配置好,这里只需要在加载mod处添加
LoadModule rewrite_module modules/mod_rewrite.so
并如下添加Options和AllowOverride设置
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
</Directory>
注: 根据WordPress的官方文档,我们最低限度应该配置 7Options FollowSymLinks
- 在“站点地址(URL)”一栏 ,去掉地址后面的wordpress
选择文章格式为如图所示
这样应该能开启固定链接了。如果还不能,那在/html下添加.htaccess文件。内容按照下面即可:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
在WordPress官方文档中,指出.htaccess需要放置在Site Url对应的文件夹下!!!如下图所示:
我的debug流程
- 确认mod_rewrite开启
- 确认/html的.htaccess正常运行 8
- 取消WordPress的固定连接,改为默认的朴素连接
发现网站可以正常访问,且去掉了/wordpress,但一旦修改为固定连接就无法工作 - 恢复为官方主题
- 将WordPress Address中的ip修改为域名
- 重新配置/wordpress文件夹下的.htaccess
- 重新在/html文件夹下创建.htaccess
在像一个无头苍蝇、不断查阅apache、mod_rewrite和.htaccess的相关资料后,我终于通过以上七步、成功解决问题。
总结
这个bug实际上只需要让上图两个url保持一致,并在/html文件夹下创建WordPress对应的.htaccess。