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

1.背景html

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

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

2.相关知识介绍apache

固定连接的修改,涉及到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模块的生效,都是基于相关转向规则的。而转向规则通常会被写入两个位置:ide

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

是写在.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的功能太强大了,咱们了解到的还只是其中的一小部分,结合相关规则,其几乎能够随意地对网站的访问进行重定向。