固定链接(Permalink)是博客日志、分类及其他博客内容列表的永久URL。其他博客主人可以使用固定链接链接到你的文章上,你也可以在email中发送某篇日志的链接。所有日志的URL应为永久性、固定不变的-这就是所谓的固定链接。
默认类型
默认形式(不美观的)
http://example.com/?p=N这里的N是Post ID号。它能够在所有服务器环境下使用,但这种形式的URL看起来不是很好看。
mod_rewrite类型(美观的)
这些固定链接样式可谓浅显易懂、赏心悦目。虽然这种链接的格式多种多样,但最常见的形式还是
http:// example.com/category/post-name/或 http:// example.com/year/month/day/post-name某些用户移除了日期元素(日,月,年)以使得永久链接格式变得更精简。
固定链接可在以下环境中工作:
具有mod_rewrite模块的Apache网络服务器
Microsoft IIS 7 + 带有URL Rewrite 1.1的网络服务器 + 作为FastCGI运行的模块与PHP5
使用404处理程序或 mod_rewrite 或 mod_magnet 的Lighttpd
PATHINFO(完美的)
PATHINFO 固定链接形式跟mod_rewrite 固定链接形式很相像,只有一点不同:前者插入了 /index.php ,如下:
http://example.com/index.php/yyyy/mm/dd/post-name/除此之外,PATHINFO就跟mod_rewrite 固定链接一样完美了,其灵活性也很相似。mod_rewrite 固定链接所能达到的效果,PATHINFO 固定链接通过/index.php部分也能做到。
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方式结尾的。当然这个可以随你的喜好自由改变。
常见的几个问题
若是以/%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规则。
win主机下的问题
“美观的”固定链接通常会要求使用mod_rewrite,而IIS(常见于Windows服务器)却不支持mod_rewrite。(如果你在Windows上使用Apache 2.0.54,mod_rewrite可能会运行,前提是要在apacheconfhttpd.conf.中激活mod_rewrite)。
使用IIS 7并具备服务器管理权限时,可以使用Microsoft的URL重写模块来代替mod_rewrite。虽然IIS 7不完全兼容mod_rewrite,但它支持WordPress的固定链接。Microsoft的URL重写模块安装完毕后,在WordPress目录下打开web.config文件,将以下规则添加到system.webServer 元素中:
< rules>
< rule name=”Main Rule” stopProcessing=”true”>
< match url=”.*” />
< conditions logicalGrouping=”MatchAll”>
< add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
< add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
< /conditions>
< action type=”Rewrite” url=”index.php” />
< /rule>
< /rules>
< /rewrite>
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/开头。
这是一个很荒谬的题目,但是荒谬到让我们发现我们的教育是多么荒谬!