wordpress 固定链接设置后 出现404错误,不能访问文章的解决办法
如果你的Apache、PHP、Mysql系统架构是自己配置的,或使用的某些安装包,可能会有这个问题,本人曾经遇到过,用第五条解决,如下:
AllowOverride Not Enabled
服务器可能没打开AllowOverride。如果httpd.config的AllowOverride设置的是None,那.htaccess将被忽略。正确的设置:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
也需要在DocumentRoot打开AllowOverride:
<Directory /var/www/html>
# ... other directives...
AllowOverride All
</Directory>
固定链接的其它知识:
1. 首先介绍下,固定链接。
固定链接是你个人博客里的文章、分类以及其他页面的固定链接地址。如果博客的固定链接变化,会造成其他人通过之前的链接地址来浏览博客时出错,所以每篇博客的链接地址都应该固定,而且永久不改———这也是固定链接名字的由来。
固定链接的类型:目前共有三种基本的类型:
(1)默认:http://example.com/?p=N N是文章ID
(2)mod_rewrite: “漂亮的链接”
使用mod_rewrite或lighttpd可以生成更好看的链接地址(查看 漂亮的链接),有各种个样的链接格式,最常见、最通用的格式如下
http://example.com/category/post-name/
http://example.com/year/month/day/post-name
(3)PATHINFO: “比较好的链接”
PATHINFO类型的链接地址和mod_rewrite类型的地址看起来很像,唯一的区别是在前面多了/index.php,如下: http://example.com/index.php/yyyy/mm/dd/post-name/除此之外,和mod_rewrite类型的地址一样,也具有同样的可配置性。任何mod_rewrite链接地址可以做的事情,PATHINFO也可以。
2. 选择你的固定链接结构
在设置 → 固定链接,可以选择默认格式,也可以使用结构标签在自定义结构的输入框里输入你想要的格式。如果想激活PATHINFO类型的链接地址,只要将地址以index.php/开头。
确保以%post_id%或%postname%结尾(如/%year%/%monthnum%/%day%/%postname%/),以便每个地址对应唯一的一篇博客。
出于性能上的考量,不推荐以博客类型、博客标签、博客作者、博客标题作为固定链接地址的开头这些都是纯文本的属性(field),使用它们作为链接的开头,WordPress需要更多的时间区分文章(Post)地址和页面(Page)地址,而且为了区分还要在数据库里存储额外的信息,带来不必要的开销。推荐使用数字的属性(field)作为链接的开头,如年份或文章ID。
%year%
文章发表的年份,四位数,如 2004
%monthnum%
月份,如 05
%day%
天,如 28
%hour%
小时,如 15
%minute%
分钟,如 43
%second%
秒,如 33
%postname%
文章标题的别名 (编辑文章/页面时的别名栏)。对于文章标题为 “This Is A Great Post!” 的%postname%是this-is-a-great-post(查看 仅仅使用 %postname%)。 出于性能原因,强烈不建议使用%postname%作为链接地址的开头。 *** 注 – 从WordPress 2.0开始这条建议可以无视了。
%post_id%
文章的唯一ID,如 423
%category%
分类的别名 (新建/编辑分类时的别名栏)。 有层级关系的类型在链接地址里就像有层级的目录。 出于性能原因,强烈不建议使用%category%作为链接地址的开头。
%tag%
标签的别名(新建/编辑标签时的别名栏)。 出于性能原因,强烈不建议使用%tag%作为链接地址的开头。
%author%
作者的别名。
3. 自定义固定链接的问题。
当创建或更新“漂亮”固定链接结构时,WordPress会生成新的重写规则并插入到.htaccess文件中。如果出错,WordPress会提示You should update your .htaccess now并且告诉你哪些重写规则需要拷贝和粘贴到.htaccess文件(粘贴到文件的末尾)。
WordPress不会删除.htaccess中任何已存在的重写规则或目录。如果有其他重写规则,把它们放到WordPress的重写规则的前面。
(1)我的.htaccess在哪里?
WordPress的index.php和.htaccess都在博客地址目录下,博客地址在设置,常规选项里可以查到。由于有个”.”在文件名中,FTP客户端可能看不到,除非你修改FTP客户端的设置,使其显示所有文件,包括隐藏文件。如果你是通过Godaddy Hosting Connection installation来安装WordPress的话,有些主机提供商(如Godaddy)不显示或不允许你修改.htaccess文件。
(2)创建和编辑(.htaccess)
如果还没有.htaccess文件,创建一个。如果能通过shell或ssh连上服务器,直接输入touch .htaccess就创建了。如果使用FTP上传文件,可以在本地创建文件,如1.htaccess,上传到WordPress的跟目录,然后重命名为.htaccess。
可以通过FTP,shell或主机提供商可能提供的控制面板来编辑.htaccess。
如果.htaccess有错而导致(“Internal Server Error (500)”),可以使用FTP或控制面板删除出错的.htaccess。
(3)自动更新 .htaccess
如果WordPress不能自动更新.htaccess,它会告诉你原因,如.htaccess文件可写,才会自动更新,但是目前不是可写的…,这个提示在设置→固定链接面板的底部。
想让WordPress自动更新,必须给WordPress开通.htaccess文件的写权限. 确切的权限依赖于你的服务器环境,尝试给文件拥有者打开写权限,然后作者所在组打开写权限,然后所有人,一步一步测试,一旦WordPress有了写权限,则不要再进一步放宽权限。
(4)不使用mod_rewrite的固定链接
漂亮的固定链接通常需要mod_rewrite,但是IIS(Windows servers)不支持mod_rewrite。(如果在Windows上使用Apache 2.0.54,mod_rewrite可以正常工作,需要在apache\conf\httpd.conf打开这个模块。)
如果使用IIS 7且有服务器的管理权限,可以使用Microsoft的URL Rewrite模块。虽然和mod_rewrite不是完全兼容,但是支持WordPress的“漂亮”链接。安装后打开WordPress文件夹下的web.config,添加下面的规则到 system.webServer节点。
4. 固定链接遇到的问题和解决
.htaccess一般性问题
对于WordPress没有生成.htaccess文件或不将新的重写规则写到已存在的.htaccess文件,原因各种各样,按照下面的步骤,一步一步,注意,当且仅当上一步无效后再继续下一步。
(1)修改权限: 使用chmod将 .htaccess的权限改为666,以便使用template editor编辑,但是不推荐这样做,因为这样的话其他有编辑模板权限的用户也能编辑.htaccess,可以将权限改为660。
(2)服务器阻止修改: 服务器有可能阻止了SERVER_SOFTWARE变量的设置,导致生成.htaccess失败。如果确定使用的是Apache,修改wp-includes/vars.php,跟着下面的步骤走。
详看:http://codex.wordpress.org/zh-cn:%E4%BD%BF%E7%94%A8%E5%9B%BA%E5%AE%9A%E9%93%BE%E6%8E%A5
5. 修复其他问题
如果正确生成.htaccess但固定链接还是有问题,到WordPress论坛How To版发帖子求助。
AllowOverride Not Enabled
服务器可能没打开AllowOverride。
如果httpd.config的AllowOverride设置的是None,那.htaccess将被忽略。正确的设置:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
也需要在DocumentRoot打开AllowOverride:
<Directory /var/www/html>
# ... other directives...
AllowOverride All
</Directory>
对于使用Mac OS X服务器的,还要修改/etc/httpd/sites/中的AllowOverride。
如果不想设为all,参考Apache Core Features.
翻页有问题
有时候翻到第二页或其他页不能正常工作,地址如下:
http://www.example.com/page/2/
http://www.example.name/category/categoryname/page/2/
http://www.example/year/month/day/page/2/
http://www.example/year/month/page/2/
访问上面的任何一个链接,出现提示说: “Sorry, no posts match that criteria.”
这是.htaccess造成的,删掉,重新生成就好了。
如果还不行,到这里看看this support post.
6. 小贴士和小技巧
如果想在Google News上展示你的网站,你的链接地址至少以3个数字结尾,通过%postname%-%post_id%很容易做到,最后生成的URL如http://mysite.com/cooking-tips-tricks-344。
地址以.html结尾
使用结构标签很容易做到这一点,如
需要注意的是,这并不会生成静态的html文件,仅仅是用.html作为后缀,页面还是动态生成的。这是否会给SEO带来好处还无定论,但是当你想从WordPress搬家时,将带来很多便利,因为所有页面可以很容易地变成静态的,而且地址不用改变。
避免固定链接地址被解析成归档链接
也许有的人一天顶多发一篇博客,于是使用%year%%monthnum%%day%这样的固定链接,这样的链接会解析成这一天所有的文章,为了避免这个问题,最好使用%year%%monthnum%%day%%hour%。
检查固定链接结构
检查博客是否有固定链接结构,使用如下代码:
if ( get_option('permalink_structure') != '' ) { echo 'permalinks enabled' }
WordPress