文档章节

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

ShareYkuaile
 ShareYkuaile
发布于 2014/12/18 22:22
字数 1275
阅读 1005
收藏 0

1.背景

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

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


© 著作权归作者所有

ShareYkuaile
粉丝 6
博文 17
码字总数 4382
作品 0
长宁
个人站长
私信 提问
wordpress固定链接解决“Not Found”问题

如果你在linux下使用的wordpress的使用,通过下图的设置,修改固定链接后出现 "Not Found”的error页面,下面是解决方案。![在此输入图片描述][1]【原因】 wordpress的固定链接需要apache的r...

Tmac
2013/11/01
144
0
Ubuntu Apache配置及开启mod_rewrite模块

刚刚将服务器系统从CentOS换成Ubuntu,将MySQL,Apache,PHP和Wordpress安装好后,发现打开主页是正常的,但是 打开文章页面时出现错误。因为使用了自定义的固定链接设置,那自然是Apache的r...

我是特种兵
2015/10/15
75
0
启用Mod Rewrite和.htaccess

Apache的Mode Rewrite模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。在大多数情况下,它和.htaccess文件配 合使用。比如本篇文章的URL(http://dancewithnet.com/2010/05...

前端巨浪
2013/04/16
143
0
Ubuntu16.4安装Wordpress

0.基本操作 更新源 apt-get update 修改主机名,阿里云主机名字太丑 vi /etc/hostname Xshell(ssh连接工具)上传下载文件,方便后续上传安装WordPress apt install rz sz sz filename 从服务端...

迦七公子
2018/01/02
0
0
pcDuino上如何安装wordpress

首先安装各个软件: 1 su ##进入root用户,开始下面的安装过程 2 sudo apt-get update ##更新源,建议每次开始安装之前都要做这步 3 sudo apt-get install apache2 ##apache 4 sudo apt-get...

pc朵拉
2013/07/03
138
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
6
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部