\"固定链接\",但是本站在修改后,发现除了主页之外,其它文章或页面均无法正常访问了。到底怎么回事?">

WordPress 修改固定链接出错(apache2)

  • 来源:
  • 更新日期:2018-05-02

摘要:1.背景 为了方便,基于wordpress搭建了一个博客平台,使用一段时间后,对于wordpress的默认的连接地址配置非常有意见,其形如\"?p=123\"的表示,可读性太差,完全无法从地址上了解出文章的任何信息,感觉被加密了似的。WordPress强大的后台管理功能提供了便捷的修改方法,\"设置\"–>\"固定链接\",但是本站在修改后,发现除了主页之外,其它文章或页面均无法正常访问了。到底怎么回事?

1.背景

为了方便,基于wordpress搭建了一个博客平台,使用一段时间后,对于wordpress的默认的连接地址配置非常有意见,其形如"?p=123"的表示,可读性太差,完全无法从地址上了解出文章的任何信息,感觉被加密了似的。WordPress强大的后台管理功能提供了便捷的修改方法,"设置"–>"固定链接",但是本站在修改后,发现除了主页之外,其它文章或页面均无法正常访问了。到底怎么回事?

002UASMrzy7605pjKJv15&690.jpg

主机VPS:Ubuntu 13.10 x86 Apache/2.4.6 (Ubuntu) Server,安装了wordpress的必须的软件包

2.相关知识介绍

固定链接的修改,涉及到Apache对于访问地址的动态解析,而与此密切相关的是mod_write模块。其实,WordPress主页上都已经说明了:Apache mod_rewrite 模块(可选,用于支持“固定链接”和“站点网络”功能)。

2.1 mod_rewrite

mod_rewrite 提供了基于正则表达式规则动态修改传入的请求的 URL 的方法。 这允许你以自己喜欢的任意方法映射任意 URL 到你的内部 URL 结构。它支持无限的规则,以及为每个规则附加条件,从而提供了一个真正灵活且强大的 URL 操作机制。URL 操作可以依赖于各种测试,例如服务器变量,环境变量,HTTP 头,时戳,甚至外部数据库查询等,以便完成 URL 单元匹配。这个模块在服务器上下文 (httpd.conf),虚拟主机上下文 (<VirtualHost> 指令块),目录上下文 (.htaccess 文件和 <Directory> 指令块) 对完整的 URL (包含目录信息部分和查询字符串部分) 操作。 重写结果可以导致新的规则处理,内部的后续处理,外部请求重定向,甚至透过内部代理, 这取决于你为规则附加的标志。一般而言,mod_rewrite模块的生效,都是基于相关转向规则的。而转向规则一般会被写入两个位置:

是将规则写在httpd.conf中,这样效率比较高,但缺乏灵活性。

是写在.htaccess文件中,将该文件放到需要运用该重写规则的网站目录的根目录即可。wordpress则通过.htaccess来实现"固定链接"。

2.2 .htaccess文件

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

3 相关可能性

既然了解到其与mod_write相关,那么剩下的就是考虑mod_write功能的无法实现,到底有哪些因素可能导致。目前网络上归纳了三个最可能的情况。

mod_rewrite模块没有加载,模块没有加载的话,必然无法进行URL映射了。

相关配置没有设置,导致mod_rewrite模块无法对相应的目录应用新的规则

.haccess文件的权限不足,大多数情况下,.htacess和mod_rewrite模块是配合使用的。

根据这三种可能性,我们可以一一进行排除。

3.1 加载mod_rewrite模块

 

a2enmod rewrite service apache2 restart

3.2 放开目录的重写的权限

仍然是配置/etc/apache2/sites-available/www.xxx.conf,查看两处,看去AllowOverride是否被设置为All,如果是None,则设置为All。

<Directory />

Options FollowSymLinks

AllowOverride All

</Directory>

以及

<Directory "/var/www/html">

......

AllowOverride All

......

</Directory>

3.3 查看.htaccess的权限

这个是本站在修改固定链接时,遇到的问题,默认的.htaccess并没有写权限,那么即使允许mod_rewrite对wordpress目录进行规则重写,其也无法将规则写入.htaccess文件中。首先查看wordpress的目录下有没有.htaccess文件,如果没有,则创建一个。

1

touch .htaccess

然后,对.htaccess文件进行授权。

1

chmod 755 .htaccess

即将该文件的权限转移给apache用户,apache用户是网站运行时,默认使用的用户,然后再将.htaccess的写权限授予apache用户组,主要是为了不必要的麻烦。其中,文件属主是默认拥有写权限的,不需要再授权。

3.4 验证

完成了上述的步骤之后,我们可以再次访问网站,发现改变"固定链接"后,网站可以无障碍地访问了。

4 总结

Apache的mod_rewrite的功能太强大了,我们了解到的还只是其中的一小部分,结合相关规则,其几乎可以随意地对网站的访问进行重定向。