菜单
展开边栏 收起边栏

wordpress固定链接(伪静态)详解

wp

什么是固定链接

其他博客主人可以使用固定链接链接到你的文章上,你也可以在email中发送某篇日志的链接。所有日志的URL应为永久性、固定不变的-这就是所谓的固定链接。

 

固定链接的类型

默认形式(不美观的)

如:http:// example .com/?p=N 这里的N是Post ID号。它能够在所有服务器环境下使用,但这种形式的URL看起来不是很好看。

mod_rewrite类型(美观的) 这些固定链接样式可谓浅显易懂、赏心悦目。虽然这种链接的格式多种多样,但最常见的形式还是

category/post-name/或 /year/month/day/post-name。这种类型的 某些用户移除了日期元素(日,月,年)以使得永久链接格式变得更精简。

固定链接可在以下环境中工作:

具有mod_rewrite模块的Apache网络服务器 Microsoft IIS7 + 带有URL Rewrite 1.1的网络服务器 + 作为FastCGI运行的模块与PHP5 使用404处理程序或 mod_rewrite 或 mod_magnet 的LighttpdPATHINFO(完美的) PATHINFO 固定链接形式跟mod_rewrite 固定链接形式很相像,只有一点不同:前者插入了 /index.php ,如下:

/index.php/yyyy/mm/dd/post-name/ 除此之外,PATHINFO就跟mod_rewrite 固定链接一样完美了,其灵活性也很相似。mod_rewrite 固定链接所能达到的效果,PATHINFO 固定链接通过/index.php部分也能做到。

wordpress固定链接设置方法

进入wp后台->设置里面的固定链接->自定义结构

wordpress固定链接设置方法

这里有几个结构可以作为参考:

 

 
%year% 日志发表的年份,四位数字
%monthnum% 日志发表的月份
%day% 日志发表的日期
%hour% 日志发表的时间-小时
%minute% 日志发表的时间-分钟
%second% 日志发表的时间-秒
%postname%日志标题的缩略版本(日志/页面编辑界面上的日志别名)。因此“This Is A Great Post!”在URI中会变成this-is-a-great-post。
%post_id%日志的唯一ID,如123
%category%分类名称的缩略版本(添加新分类/编辑界面上的分类别名)。嵌套的子分类会作为嵌套子目录出现在URI中。出于运行方面的考虑,不推荐以%category%作为固定链接的起始部分。
%tag%标签名称的缩略版本(添加新标签/编辑界面上的标签别名)。出于运行方面的考虑,不推荐以%tag%作为固定链接的起始部分。
%author%作者名称的缩略版本.

 

既然知道了我们就可以对这些开始组合了。

几种组合方式如下

 

 
/?p=%post_id%(默认的)
/%year%/%monthnum%/%day%/%postname%/(年/月/日/日志名)
/%year%/%monthnum%/%postname%/(年/月/日志名)
/%monthnum%/%day%/%postname%/(月/日/日志名)
/%year%/%monthnum%/%day%/%post_id%/(年/月/日/日志id号)
/%year%/%monthnum%/%post_id%/(年/月/日志id号)
/%monthnum%/%day%/%post_id%/(月/日/日志id号)
/archives/%post_id%(/archives/日志id号)
/archives/%postname%(/archives/日志名)
/%post_id%(/日志id号)
/%postname%(/日志名)
/%category%/%postname%.html (分类/日志名.html)
/%category%/%postname%.htm(分类/日志名.htm)
/%postname%.html(/日志名.html)
/%postname%.htm(/日志名.htm)
/%post_id%.html(/日志id号.html)
/%post_id%.htm(/日志id号.htm)

 

常用的就是以htm后者html方式结尾的。当然这个可以随你的喜好自由改变。

win主机IIS 6 WordPress固定连接的设置

一般使用wordpress都会将设置固定链接(伪静态),这样更有利于seo,wordpress在LINUX系统的服务器中可以很好的使用,在Windows主机,为了完美支持伪静态就需要下点功夫。
空间需要支持rewrite组件,现在几乎所有WIN主机都支持Rewrite 组件,有个问题就是,博客链接能伪静态,可中文标签的链接打不开,比如我们设置的中文目录中文tag,就打不开了。解决WordPress博客伪静态中文标签无法打开可以使用下面的规则:

 

 
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule /tag/(.*) /index\.php\?tag=$1
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# Rules to ensure that normal content gets through
RewriteRule /robots.txt /robots.txt [L]
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico /favicon.ico [L]
# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule /wp-(.*) /wp-$1 [L]
# For normal wordpress content, via index.php
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]

 

在使用上有什么不清楚请查看下面的参考资料,有详细的设置教程

WIN主机二级目录装WordPress固定链接设置

 

很多朋友主站并不想放博客,有的朋友喜欢美观想放一个主页什么的,有的是公司的网站,或者有的朋友想做淘宝客,那么这样只能把WordPress放到二级目录(子目录)里面了,wordpress在二级目录的伪静态规则规则:

 

 
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# Rules to ensure that normal content gets through
RewriteRule /blog/sitemap.xml /blog/sitemap.xml [L]
RewriteRule /blog/favicon.ico /blog/favicon.ico [L]
# For tag
RewriteRule /blog/tag/(.*)/page/(\d+)$ /blog/index\.php\?tag=$1&paged=$2
RewriteRule /blog/tag/(.+)$ /blog/index\.php\?tag=$1
# For category
RewriteRule /blog/category/(.*)/page/(\d+)$ /blog/index\.php\?category_name=$1&paged=$2
RewriteRule /blog/category/(.*) /blog/index\.php\?category_name=$1
# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule /blog/wp-(.*) /blog/wp-$1 [L]
# For normal wordpress content, via index.php
RewriteRule ^/blog/$ /blog/index.php [L]
RewriteRule /blog/(.*) /blog/index.php/$1 [L]
#For page
RewriteRule /blog/page/(.*)/?s=(.*) /blog/index\.php\?s=$2&paged=$1
RewriteRule /blog/page/(.*) /blog/index\.php\?paged=$1

 

win主机安装两个wordpress固定链接设置

 

如果根目录和子目录同时装wordpress程序,该怎么实现伪静态?

固定链接设置规则:

 

 
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# For sub
RewriteRule /wordpress/sitemap.xml /wordpress/sitemap.xml [L]
RewriteRule /wordpress/favicon.ico /wordpress/favicon.ico [L]
RewriteRule /wordpress/tag/(.*)/page/(\d+)$ /wordpress/index\.php\?tag=$1&paged=$2
RewriteRule /wordpress/tag/(.+)$ /wordpress/index\.php\?tag=$1
RewriteRule /wordpress/category/(.*)/page/(\d+)$ /wordpress/index\.php\?category_name=$1&paged=$2
RewriteRule /wordpress/category/(.*) /wordpress/index\.php\?category_name=$1
RewriteRule /wordpress/wp-(.*) /wordpress/wp-$1 [L]
RewriteRule ^/wordpress/$ /wordpress/index.php [L]
RewriteRule /wordpress/(.*) /wordpress/index.php/$1 [L]
RewriteRule /wordpress/page/(.*)/?s=(.*) /wordpress/index\.php\?s=$2&paged=$1
RewriteRule /wordpress/page/(.*) /wordpress/index\.php\?paged=$1
# For root
RewriteRule /tag/(.*) /index\.php\?tag=$1
RewriteRule /robots.txt /robots.txt [L]
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico /favicon.ico [L]
RewriteRule /wp-(.*) /wp-$1 [L]
RewriteRule /wordpress/(.*) /wordpress/$1 [L]
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]

 

关于规则使用设置,详细图文教程请查看下面的参考资料

win主机IIS 7 WordPress固定连接的设置

“美观的”固定链接通常会要求使用mod_rewrite,而IIS(常见于Windows服务器)却不支持mod_rewrite。(如果你在Windows上使用Apache 2.0.54,mod_rewrite可能会运行,前提是要在apache\conf\httpd.conf.中激活mod_rewrite)。

使用IIS 7并具备服务器管理权限时,可以使用Microsoft的URL重写模块来代替mod_rewrite。虽然IIS 7不完全兼容mod_rewrite,但它支持WordPress的固定链接。Microsoft的URL重写模块安装完毕后,在WordPress目录下打开web.config文件,将以下规则添加到system.webServer 元素中:

 

 

 

 

win主机 IIS 7伪静态规则的具体使用方法可以查看下面参考资料

IIS网站上有一份关于Microsoft的URL重写模块详细的安装指南,该模块可用于 x64 与x86系统。

如果这个方法行不通,还可以试试PATHINFO链接;将index.php/放在自定义链接结构的开始部分前:

/index.php/%year%/%monthnum%/%day%/%postname%/这个方法并不总能成功,尤其是用在运行于ISS 6上的WordPress时。要让这方法运行在IIS上,需要将以下两行代码添加到php.ini文件并将文件保存在网络根目录下。

 

 
cgi.fix_pathinfo = 1
cgi.force_redirect = 0

另一种解决方法是利用IIS的自定义404重定向。这要求你的虚拟主机允许你添加自定义404重定向,不过这并不需要你安装任何第三方mod_rewrite软件,也不需要你的固定链接结构以/index.php/开头。
IIS7虚拟主机装两个wordpress固定链接设置

安装两个wordpress,一个在根目录,一个在子目录(二级目录)伪静态规则设置方案:

根目录的伪静态规则设置可以看下面参考资料

在子目录(二级目录)中的安装wordpress,Web.config配置文件伪静态代码:

 

 
< ?xml version="1.0" encoding="UTF-8"?>














 

解决win主机下中文目录标签出现404错误

产生中文TAG标签链接和中文别名分类目录链接无法打开的原因是WordPress不支持中文的编码。我们需要编辑WordPress源文件让它支持中文的编码形式,也就是UTF-8和GBK编码。

打开编辑wp-include/class-wp.php文件;

 

 
$pathinfo = $_SERVER['PATH_INFO'];

 

替换为

 

 
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");

 

 

 
$req_uri = $_SERVER['REQUEST_URI'];[/php]

 

替换为

 

 
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

 

详细设置方案,有源文件提供下载,图文教程请查看下面参考资料

使用固定链接的一些问题

常见的几个问题

若是以/%category%/%postname%/这种方式来自定义固定链接的时候打开的网址可能会出现乱码,可能会打不开页面,那是因为分类目录和文章名字是中文引起的,这样我们可以使用英文的别名来解决。
在创建wordpress固定链接的时候会出现别名设置,选择合适的英文或者拼音。

在发布文章的时候在文件标题下方有一个固定链接,选择编辑即可。

使用固定链接的必要条件

具有mod_rewrite模块的Apache网络服务器 在WordPress主目录下 激活 FollowSymLinks选项 允许FileInfo directives(如 AllowOverride FileInfo 或 AllowOverride All) 一个.htaccess文件(若该文件缺失,WordPress会尝试在用户激活美观的固定链接时创建一个新文件) 如果你希望WordPress自动更新.htaccess文件,需要为WordPress赋予该文件的写入权限 当你新建或更新了一个“美观的”固定链接结构后,WordPress会生成重写规则并尝试将重写规则插入适当的.htaccess文件。如果WordPress无法将重写规则插入.htaccess文件,就会显示You should update your .htaccess now(请立即升级你的.htaccess文件)这样的信息,然后输出重写规则,让你复制并粘贴到文件中(将规则置于文件结尾处)。

在WordPress 2.0以及更高版本中,你可能只需要执行一次以上动作,因为WordPress会在内部运行重写规则。如果移动了WordPress主目录的地址(博客地址),就需要重复以上动作。

WordPress会与已有的.htaccess文件合作愉快,也不会删除任何已存在的重写规则或其他指令。如果你有其它mod_rewrite规则,请将你的规则优先于WordPress生成的mod_rewrite规则。

Linux主机下出现404错误页解决方案

在Linux主机下,Wordpress固定连接后,也有出现404错误页的可能!

最简单的方法如下:

自建个 TXT 文章 把下面这段代码复制进去!

 

 
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
 
# BEGIN WordPress
 
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
 
# END WordPress

 

然后把TXT文件更改名字

扩展名一起改的哦 .htaccess?

把这个文件上传到 WordPress 根目录!

Copyright © 2008-. JiangFei.net all rights reserved
苏公网安备32048202001026号苏ICP备18062911号