开启WordPress伪静态

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的高级使用)[]”中有详细讲解。

基本配置

  1. 复制/wordpress文件夹下的”index.php”到/html下,并修改
    require( dirname( __FILE__ ) . './wordpress/wp-blog-header.php' );

    require('./wordpress/wp-blog-header.php'); 5 6

  2. 因为Apache访问权限已经配置好,这里只需要在加载mod处添加LoadModule rewrite_module modules/mod_rewrite.so并如下添加Options和AllowOverride设置

<Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride All
 </Directory>

注: 根据WordPress的官方文档,我们最低限度应该配置 7Options FollowSymLinks

  1. 在“站点地址(URL)”一栏 ,去掉地址后面的wordpress

  2. 选择文章格式为如图所示
    select url structure

  3. 这样应该能开启固定链接了。如果还不能,那在/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对应的文件夹下!!!如下图所示:
WordPress Documents

我的debug流程

  1. 确认mod_rewrite开启
  2. 确认/html的.htaccess正常运行 8
  3. 取消WordPress的固定连接,改为默认的朴素连接
    发现网站可以正常访问,且去掉了/wordpress,但一旦修改为固定连接就无法工作
  4. 恢复为官方主题
  5. 将WordPress Address中的ip修改为域名
    screen shot before changing
  6. 重新配置/wordpress文件夹下的.htaccess
  7. 重新在/html文件夹下创建.htaccess

在像一个无头苍蝇、不断查阅apache、mod_rewrite和.htaccess的相关资料后,我终于通过以上七步、成功解决问题。

总结

这个bug实际上只需要让上图两个url保持一致,并在/html文件夹下创建WordPress对应的.htaccess。

发表评论

电子邮件地址不会被公开。 必填项已用*标注