2010年07月13日 102条评论

让WIN主机支持WordPress的永久链接

此文所说方法 是非常规方法,所以不知道对于 SEO 有何影响,非常在意 SEO 者慎用,最好换主机。

其实这是前几天一个朋友遇到的问题,他向我请教为啥他的WordPress怎么也设不了永久链接,只有设为 http://域名/index.php/xxxx/xxx 方式才能正确访问文章页面,如果设为 http://域名/xxxx/xxx 方式就不能访问文章页面。

于是乎我用ftp进去看了下,他的WordPress是安装在blog这个目录下,也就是说他的博客访问方式是:域名/blog,再看看没有.htaccess,于是乎我就建了个.htaccess,设置了重写规则,但不管我怎么设置都不行。

于是叫他问空间商这个空间是啥主机,支持.htaccess否?

得到消息是:linux主机,支持.htaccess

于是又折腾一番,还是不行,而且网站根目录的路径让我很怀疑:xxx/xxx/www,这个www不是win主机经常用的么?

于是再次叫朋友质问空间商,得到答复:WIN主机,不支持.htaccess,但可以设置httpd.ini来支持(奸商无处不在,小白注意了)

于是又折腾一番,还是不行,我知道该骂谁!但骂不了……

没办法了,只有自己动手帮朋友丰衣足食了,放狗搜……搜来一大片,基本步骤是:(太多一样的文章,我不知道原文出自哪里,就叫出自互联网吧)

大概原理:利用404错误页面重定向到永久链接

1. 把下面的代码存为 404.php,放在WordPress根目录

<?php
if (strpos($_SERVER["SERVER_SOFTWARE"], "Apache") === 0){
 // Apache
 // REQUEST_URI形如"/non-exist-page.html"
 $uri = $_SERVER['REQUEST_URI'];
}
else{
 // IIS
 // $_SERVER['QUERY_STRING']形如"404;http://localhost/non-exist-page.html"
 $qstr = $_SERVER['QUERY_STRING'];
 $_SERVER['QUERY_STRING'] = "";
 $pos = strrpos($qstr, '://');
 $pos = strpos($qstr, '/', $pos + 4);
 $uri = substr($qstr, $pos);
}
$_SERVER['REQUEST_URI'] = $uri;
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
// 解决重定向的页面中的页面导航问题
$_SERVER['SCRIPT_NAME'] = $_SERVER['PATH_INFO'];
include('./index.php');
?>

2. 进WIN主机后台设置404错误页设为指向所有目录的404.php

3. 然后进WP后台设置永久链接

我安装步骤设置好了,可就是还不中用……(所以上面的3个步骤只适合把WP安装在网站根目录的)

分析:是不是因为WordPress放在子目录的缘故?

于是我按照下面的步骤继续:

1. 把下面的代码存为404.php,并上传到网站的根目录(WordPress在根目录下的blog子目录中)

<?php
if (strpos($_SERVER["SERVER_SOFTWARE"], "Apache") === 0){
 // Apache
 // REQUEST_URI形如"/non-exist-page.html"
 $uri = $_SERVER['REQUEST_URI'];
}
else{
 // IIS
 // $_SERVER['QUERY_STRING']形如"404;http://localhost/non-exist-page.html"
 $qstr = $_SERVER['QUERY_STRING'];
 $_SERVER['QUERY_STRING'] = "";
 $pos = strrpos($qstr, '://');
 $pos = strpos($qstr, '/', $pos + 4);
 $uri = substr($qstr, $pos);
}
$_SERVER['REQUEST_URI'] = $uri;
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
// 解决重定向的页面中的页面导航问题
$_SERVER['SCRIPT_NAME'] = $_SERVER['PATH_INFO'];
include('./子目录/index.php');
?>

注意上面代码中红字:我朋友的WP是装在子目录blog中,所以他的是 include('./blog/index.php'))

2. 进WIN主机后台设置404错误页设为指向所有目录的404.php

3. 然后进WP后台设置永久链接

还是不行……郁闷,天气那么热还让人郁闷……

继续分析,根据错误提示,好像是wp-blog-header.php文件的路径问题

我检查了一下WP的index.php:require('./wp-blog-header.php');

正常啊,index.php和wp-blog-header.php同一个目录啊,继续郁闷……

死马当活马医

把 WP 下的 index.php 里面的

require('./wp-blog-header.php');

改为

require('wp-blog-header.php');

进WP后台一试,竟然成功了,囧~

zww
or
oooo

“让WIN主机支持WordPress的永久链接”有102条评论

  1. 爱月 says:

    所以服务器的配置之类的乱七八糟的东西最好都是自己折腾~

    1. zwwooooo says:

      @爱月 其实是国内一些主机商不够专业

  2. Kars says:

    也就国内 才有 win主机 吧、、

    1. zwwooooo says:

      @Kars 国外也有,但相对少

  3. TTkea says:

    额,404对博客有影响的吧....

    1. zwwooooo says:

      @TTkea 可能有,具体不知,不推荐,推荐换机,哈

  4. 阿修 says:

    这个没用到过。但是奸商确实可恨啊~~

    1. zwwooooo says:

      @阿修 对,竟然坑菜鸟

  5. 7cbt says:

    我是LINUX的 - - 好像不能

    1. zwwooooo says:

      @7cbt 不能,就是环境没有配置好,或者是主机商限制了

  6. 猪八戒 says:

    印象中好像win主机是asp空间。

    1. zwwooooo says:

      @猪八戒 win主机也是可以支持全型空间的。

  7. Dianso says:

    记得刚用WP用的win主机,怎么也搞不定

    1. zwwooooo says:

      @Dianso 所以还是linux主机好,又比较便宜

  8. 小邪 says:

    Win主机太恐怖了,效率低安全性也低资源占用一下子就上去了,远离win主机,珍爱生命 ~ :grin: :grin:

    1. zwwooooo says:

      @小邪 win + php 非常恐怖

  9. Lazyyyyyy says:

    利用重定向来改永久链接好像不太好,具体弊端以前看过但没放在心里。

    现在我用httpd.ini文件来做永久链接,而且在WP后台改成任何静态链接的形式都能支持。

    我也不太了解原理,给你研究一下~

    [ISAPI_Rewrite]

    # Defend your computer from some worm attacks
    RewriteRule .*(?:global.asa|default.ida|root.exe|..).* . [F,I,O]

    # 3600 = 1 hour
    # CacheClockRate 3600

    RepeatLimit 32

    #301转向
    RewriteCond Host: ^fireage.cn$
    RewriteRule (.*) http://www.fireage.cn$1 [I,RP]

    # Protect httpd.ini and httpd.parse.errors files
    # from accessing through HTTP
    # Rules to ensure that normal content gets through
    RewriteRule /software-files/(.*) /software-files/$1 [L]
    RewriteRule /images/(.*) /images/$1 [L]
    RewriteRule /sitemap.xml /sitemap.xml [L]
    RewriteRule /wp/sitemap.xml /wp/sitemap.xml [L]
    RewriteRule /favicon.ico /favicon.ico [L]
    RewriteRule /robots.txt /robots.txt [L]
    RewriteRule / / [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]

    1. zwwooooo says:

      @Lazyyyyyy 还是httpd.ini好,只是当时没找到配置,找到的又没效果

  10. A.shun says:

    路过。。围观残念的win主机

    1. zwwooooo says:

      @A.shun 留下买路钱!

  11. 成叔叔 says:

    我承认我当初是为了永久链接才浪费了WIN主机换了linux :grin:

    1. zwwooooo says:

      @成叔叔 你浪费的值!话说你什么时候成叔叔了?

  12. 周先生 says:

    为什么有的是在根目录下建立一个名为web.config的文件就行了呢?我发到你的gamil邮箱了,你看看呢。

    1. zwwooooo says:

      @周先生 哈,我发给我那朋友了,谢谢

  13. 签名 says:

    门外汉了解一下 呵呵

  14. 619 says:

    此法忒邪恶了 :arrow:

    1. zwwooooo says:

      @619 相当邪恶,不推荐

  15. BoKeam says:

    额。我很少用win主机 :evil:

    1. zwwooooo says:

      @BoKeam 我也不用

  16. nalimai says:

    不太懂,学习一下。

  17. 求索阁 says:

    这方法不错,学习了~

  18. 1海天 says:

    WP 还是在非IIS下的好啊

    1. zwwooooo says:

      @海天 对啊,php还是linux好

  19. mice says:

    当初在WIN下 我用的伪静态,规则已经被我修正的差不多了..
    但是伪静态那个占CPU太大了,实在不行,就转成linux了..

    1. zwwooooo says:

      @mice 我觉得换主机比较划算,呵呵

  20. 集思 says:

    想当初我在Linux主机居然能忍受那个Index.php

发表评论

昵称 *

网址

B em del U Link Code Quote