说
实话,很头疼,从有这个想法到时间和服务器玩了两次生离死别。现在总结一下,作为记录。
1、我的服务器是linux+mysql+apache。要想实现permalink必须要加载apache的rewrite模块,那么首先检查服务器,可以通过phpinfo来查看apache已经加载的模块。
我的服务器并没有加载,那么我首先要通过单独加载mod_rewrite来打开重新功能。
首先要下载服务器上apache所对应版本的源码包。
(1)、Apache安装rewrite模块的时候需要DBM支持,否则无法编译,所以首先要安装一个GDBM
下载地址:ftp://ftp.gnu.org/gnu/gdbm/
安装步骤:
进入安装目录,
./configure
make
make install
make install-compat (最后行也要执行。否则无法编译出ndbm.h头文件)
如果您不能确定服务器上是否已经装有DBM,那么可以安装一下。否则这步可以跳过。
(2)、现在到apache源码目录的标准模块目录中(/root/apache_src/src/modules/standard/)中,使用如下指令编译出so文件:
/usr/local/apache/bin/apxs -c mod_rewrite.c -lgdbm
即可得到mod_rewrite.so文件。
备注:”-lgdbm”是用为说明在编译mod_rewrite.c时要把gdbm链接进来。这样在第6步启动apache时就不会报出”dbm fetch”的错误了。
(3)、现在让apache的apxs来自动向http.conf配置文件中加入LoadModule语句并将mod_rewrite.so文件拷贝到apache/libexec目录
/usr/local/apache/bin/apxs -i -A -n rewrite /root/apache_1.3.34/src/modules/standard/mod_rewrite.so
备注:命令中的rewrite参数是告诉apxs命令mod_rewrite.so文件中的模块名。在命令执行后,apxs会在LoadModule中为rewrite加上”_module”以标名模块名称。如果你在启动apache时发现总是给出“不能定位API”之类的错误,那就是说明LoadModule后面的模块名的语法要根据您的apache版本加以改变。
(4)、停止apache
apache/bin/apachectl stop
(5)、运行配置文件检查命令
apache/bin/apachectl configtest
如显示Syntax OK,则表示整个操作成功。那么可以到第6步。否则根据提示信息进行调试。但只要按照此文所说进行操作是不会出错的。
(6)、启动apache
apache/bin/apachectl start
现在没有问题的话那么说明服务器已经加载了rewrite模块。
2、进入WP设置选项,点击permalink,仍然出现505错误。非常不解。通过查找发现问题可能出在.htaccess文件的设置。
这个文件是rewrite模块所相关的一个文件。这个文件和httpd.conf都是用来对apache服务进行配置的。但是.htaccess的配置不需要重启apache服务,可以即时实现。
在permalink的设置中这个文件也是可能会形成障碍的。通过ssh无法查看到该文件的存在。如果wp根目录下没有这个文件可以通过touch .htaccess命令来建立。通过chmod命令来更改此文件权限达到可写。在permalink设置完成以后可以将该文件写回原权限。
通过尝试修改这个文件并不能修复我WP的505错误。说明问题并不在这里。
但是可以通过删除这个文件来恢复WP的设置为默认设置,不过这样却始终无法实现url的重新。
3、继续查阅相关资料,发现AllowOverride All问题。
这也是和rewrite相关的配置问题。因为我的服务器上是设置过apache虚拟机的。所以为了一个站点而打开全局多少有些不划算。通过
<Directory /站点路径>
AllowOverride All
</Directory>
可以单独打开一个站点。
再点permlink。game over。
这是为了实现permalink而进行的全部学习过程。
欢迎还是不明白的朋友留言。
欢迎转载。转载请注明出处。