wordpress安装在win主机利用httpd.ini固定链接并…
2019-03-22 04:12:42来源: www.utubon.com 阅读 ()
windows主机服务器的网站以搭建在虚拟主机上,当我们用习惯了apache下的.htaccess的时候,很难想象windows主机上怎么实现它的强大功能。实际上windows主机服务器上的虚拟主机可以用httpd.ini文件来充当.htaccess文件在Linux主机空间的作用,不过要令你失望的是,httpd.ini的功能完全没有.htaccess那么强大,规则上没有那么丰富,细节上也有很大的不同。如果你在win主机上安装了wordpress,那么对付wordpress固定链接的设置将是一件令你头痛的事。本文致力解决这一问题,并尽量详尽。
一、httpd.ini实现域名301重定向:
[ISAPI_Rewrite] RewriteCond Host: ^utubon\.com$ RewriteRule (.*) http\://www\.utubon\.com$1 [R,I,L] |
这不是本文的重点,只不过跟本文的SEO有点关系,顺带写上,一笔带过。
二、httpd.ini实现wordpress固定链接:
[ISAPI_Rewrite] RewriteRule /sitemap.xml /sitemap.xml [L] RewriteRule /favicon.ico /favicon.ico [L] RewriteRule /wap(.*) /wap$1 [L] RewriteRule /content/uploads/(.*) /content/uploads/$1 [L] RewriteRule /wp-(.*) /wp-$1 [L] RewriteRule ^/$ /index.php [L] RewriteRule /(.*) /index.php/$1 [L] |
将上面的代码保存在一个名叫httpd.ini的文本文件中(用txt文件直接修改文件名),上传到web根目录,这样win主机下就能实现wordpress的固定链接了,并且你可以放心大胆的将后台设置固定链接中的“/index.php/”去除掉。
如果你在linux主机下了解过.htacess文件的使用,那么应该对此段代码不会陌生。只不过在httpd.ini中需要排除/sitemap.xml等类似的单独页面,如果不在加上这些相关语句,那么你的wordpress将会返回给用户“页面未找到”的提示,原因正如你想到的一样,因为你做了RewriteRule /(.*) /index.php/$1 [L]的规定,所以当你访问/sitemap.xml实际上已经重写到/index.php/sitemap.xml了,自然没有该页面。如果你还不明白不清楚语句的意思,你可以看本文参考来源,或到网上寻找.htaccess的教程方只其中奥妙。
虽然网上还有其他的办法,但本人认为这是最好的方法。在上传了httpd.ini之后,虽然实现了最初的固定链接网址形式,但有一个不太让人容易注意到的地方是,当你点击某个标签时,会发现找不到该页,原因是你的网址中含有中文字符,需要做如下修改:
修改网站目录下wp-include/classes.php文件(最新3.1版需要修改的文件是wp-include/class-wp.php)
$pathinfo = $_SERVER['PATH_INFO'];修改为$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'GBK'); $req_uri = $_SERVER['REQUEST_URI'];修改为$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'GBK'); |
三、解决?p=postid形式的文章短连接仍然可以访问的问题
你可能对这种rewrite规则比较熟悉,国内的程序基本上都是用这种Rewrite。请注意这时WP的内部过程完全不同,WP的query vars值均来源于$_GET(Apache直接rewrite生成的), 但Request_uri或Path_Info仍会被解析并且生成的$perma_query_vars完全正确,只是不会被用于query vars而已。因为$_GET优先级高于对url rewrite获得的值,因此在windows下IIS的httpd.ini里加入rewrite规则,后台permalink设置为默认后rewrite后友好地址仍可以访问。为了使网站更有利于SEO,减少不同网址却内容相同的情况,我们对文章页、分类页、单独页面做如下处理:
在wordpress主题文件头部文件或能够被全局访问的文件内加入如下代码
if($_GET['p']||$_GET['page_id']){ if($_GET['p'])$id=$_GET['p']; if($_GET['page_id'])$id=$_GET['page_id']; $post= get_post($id); $name=$post->post_name; header('HTTP/1.1 301 Moved Permanently');//发出301头部 header('Location: '.bloginfo('url').'/'.$name.'/'); exit(); }else if($_GET['cat']){ $id=$_GET['cat']; $cat=get_category($id); $name=$cat->slug; header('HTTP/1.1 301 Moved Permanently'); header('Location: '.bloginfo('url').'/cat/'.$name.'/'); exit(); }else if($_GET['tag']){ $name=$_GET['tag']; header('HTTP/1.1 301 Moved Permanently'); header('Location: '.bloginfo('url').'/tag/'.$name.'/'); exit(); } |
这段代码根据网址中是否包含p,page_id,cat,tag参数进行跳转,进入其别名为网址的页面。你也可以根据这种方法,来跳转更多的页面。当然这只是简单的处理方法,如果你的要求不是很高,可以使用该方法,如果你使用了其他的插件导致网址中出现p等参数,则需要写更多的代码来排除它。
由于win主机在这方面的严重缺陷,故建议使用wordpress建站的朋友尽量选择U主机,这样对各种自定义功能的实现更加直接。《完》
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:数据科普──网站数据是怎么来的
- Windows操作系统服务器怎样安装SSL安全证书 2019-04-10
- 如何选择和使用wordpress主题制作特色网站 2019-04-10
- WordPress网站搭建如何购买域名及域名绑定 2019-04-10
- 两款插件快速实现,wordpress全站开启https 2019-04-10
- 为什么选择 WordPress CMS来建站的9个理由 2019-04-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash