您的位置:首页 > 其它

wordpress固定链接设置伪静态后无法访问/出错?

2010-12-28 11:26 686 查看
首先,关于什么是固定链接和伪静态在这里就不说了,如果还不知道请先去百度或者谷歌一下,因为这两个是WordPress的基础知识,也是你解决这个问题一定要懂的两个概念。

大多人在设置WordPress的固定链接的时候,都喜欢在后面加个.htm弄个伪静态,好处大家也应该都知道,不然也不会这么设了(不过如果确实不知道,也还请去百度一下吧)。但是,有些同行设置了伪静态的固定链接之后访问正常,有一些却无法访问了,大多应该是提示404找不到网页。为什么会这样呢?

我碰到这个问题是在给我的WordPress搬家之后,原本在家电信的ADSL上网用的是0fees.net的免费主机,访问速度还可以。到了学校之后,虽说这儿号称是CERNET华南地区的总节点,可毕竟是教育网啊,挂一直速度挺快的南京移动的代理还访问不了,好不容易才找到了一个挺快的电信代理可以访问,不过速度也确实令人难受。于是决定再给WordPress搬次家,搬到自己的机器上。

给WordPress进行了一次更换域名的搬家之后,首页可以访问。可是在首页点击文章链接打开单文章页面时问题就来了,就是上面说的出错了,老是提示404找不到网页。怎么搞的?估计是链接问题。固定链接吗?

如果你在网上看过关于设置固定链接伪静态的介绍文章,你会发现,很多作者都强调过,设置伪静态的前提是你的主机(服务器)要支持mod_rewrite。Apache的rewrite模块,提供了一个基于规则的重写(rewrite,也许译为重构更为合适)引擎,来实时重写发送到Apache的请求URL。因功能极其强大,被称为URL重写的“瑞士军刀”。WordPress的固定链接的设置和伪静态就是利用了Apache的mod_rewrite模块来实现的。另外值得注意的是,虽然mod_rewrite是Apache的一个模块,但其他服务器软件,如IIS等也有类似的功能模块。因此如果你的主机不支持mod_rewrite的话,非但设了没用,而且还会出错,说的就是这种情况。不过目前提供虚拟主机服务的,即使是免费空间,也大多是默认支持mod_rewrite的,因此很多人往往会忽略这个问题。不过我的本地服务器是自己Apache+MySQL+PHP+…一步步配置起来的,因而当初没把Apache的mod_rewrite这个模块启用,才导致了这个问题。

那怎么才能知道你的主机支不支持mod_rewrite呢?

1.检测Apache是否开启了mod_rewrite模块

通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。



已开启了mod_rewrite

如果没有开启“mod_rewrite”,则打开目录 “你的apache安装目录/apache/conf/” 下的 httpd.conf 文件(你的Apache安装目录可以在你自己的phpinfo()的结果页中查到,既上面的Server Root一项。别用记事本和写字板,应该用Notepad++或者UltraEdit等专业的代码编辑工具),通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。

如果没有查找到,则到“LoadModule” 区域,在最后另起一行加入“LoadModule rewrite_module modules/mod_rewrite.so”,然后重启apache服务器即可。

2.让Apache服务器支持.htaccess

为了让自己的主机/服务器支持rewrite重写,还得让Apache支持.htaccess。

.htaccess文件,又叫分布式配置文件,它提供了针对每个目录改变配置的方法,可以在一个特定的文档目录中放置一个包含指令的文件,以达到控制此目录及其子目录的目的。通 常.htaccess文件的使用配置语法和主配置文件一样,但是做为用户,当然所能使用的命令是受到限制的。系统管理员可以通过配置apache的AllowOverride指令来配置决定.htaccess文件中哪些指令有效。如果在文档的子目录中还设置了.htaccess文件的话,子目录中的指令将会覆盖掉上级目录或者主服务器配置文件中的指令。此应用尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下特别有意义。



如何让自己的本地APACHE服务器支持”.htaccess”呢?还是要修改前面说过的Apache服务器的配置文件httpd.conf文件。打开httpd.conf文件,同样用Ctrl+F查找"FollowSymLinks",找到下面一段代码(找不到??,往下面看)

Options FollowSymLinks

……

………

AllowOverride None

改为

Options FollowSymLinks

……

………

AllowOverride All

就可以了。同样,重启Apache服务器后生效。

另外,如果你的Apache服务器版本是2.2以上的,则上面的代码应该是将
“Options Indexes FollowSymLinks

… …

AllowOverride None
改为

“Options Indexes FollowSymLinks

… …

AllowOverride All

而且还要将“Options Indexes FollowSymLinks … …AllowOverride All”所在的“Directory”目录标签改为你的网页根目录,例如我的是“C:/inetpub/wwwroot”,那“Directory”就改为“< Directory “C:/inetpub/wwwroot”>”,如下图



同样,重启Apache服务器后生效。

3.建立.htaccess 文件

在WordPress中设置了伪静态的固定链接之后,我的是自己会建立了一个WordPress文件。那么以下的3、4步可以略过,这时应该就可以通过固定链接访问任意一篇文章了。如果没有,那么你还要继续往下读,自己建立.htaccess文件。

如果是在windows平台下,刚开始还真不知道怎么建立”.htaccess”文件,因为这个文件实际上没有文件名,仅仅只有扩展名,通过普通方式是无法建立这个文件的,别着急,马上告诉你三种方法:三种方法都是先建立一个htaccess.txt的文本文件(当然,这个文本文件的名字你可以随便取),然后有三种方式给这个文件重命名:

(1)用记事本打开,点击文件–另存为,在文件名窗口输入”.htaccess”,注意是整个绿色部分,也就是包含英文引号,然后点击保存就行了。

(2)进入cmd命令窗口,通过cd切换当刚建立htaccess.txt文件的文件夹,然后输入命令:rename htaccess.txt .htaccess ,然后点击键盘Enter键即可。

(3)通过ftp连接htaccess.txt所在文件夹,通过ftp软件重命名。

如果以上方法还不行,还可以再自己到网上找下其他办法,或者给我留言。大家一起想办法,顺便多学一种方法。

4.rewrite规则学习

我们新建一个.htaccess文件之后,就在里面写入以下内容

RewriteEngine on #rewriteengine为重写引擎开关,on为开启,off为关闭

RewriteRule ([0-9]{1,})$ index.php?id=$1

我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的([0-9]{1,})是指由数字组成的,$是结束标志,说明是以数字结束!

好吧,现在我们可以实现伪静态页面了,写下以下的规则(不过注意了,WordPress的.htaccess文件的规则可不是这样的,详情见本文结尾)

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$ index.php?action=$1&id=$2

</IfModule>

([a-zA-Z]{1,})-([0-9]{1,}).html$是规则,index.php?action=$1&id=$2是要替换的格式,$1代表第一个括号匹配的值,$2代表第二个,如此类推!

我们写一个处理的PHP脚本:index.php

其中的PHP代码如下:

<?php

echo ‘你的Action是:’ . $_GET['action'];

echo ‘<br/>’;

echo ‘你的ID是:’ . $_GET['id'];

?>

好了,放到你的本地服务器网页根目录下,我们现在在浏览器中输入:

localhost/view-12.html

输出的是:

你的Action是:view

你的ID是:12

好了,配置完以上几步,你的本地Apache服务器就支持mod_rewrite了,WordPress就可以通过伪静态的固定链接访问博文了。不过,由于WordPress中不同的固定链接的设置方式的rewrite规则是不同的,一般人都不太可能自己写.htaccess文件的内容。所以一般只能等WordPress程序自动创建。我记得好像在Windows系统的PHP环境里面一般是会自动创建的,而在Linux系统的PHP环境下则需设置.htaccess文件所在目录下(在WordPress中为WordPress的根目录下)属性设为777可写,或者手动建立.htaccess文件并将属性设为777可写,WordPress就可以自动写入rewrite规则,实现伪静态。

转载请注明文章转载自:WebMLog [http://webmlog.tk]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐