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