konakona
[原创] 让WordPress支持含有?问号的永久链接、固定链接
[原创] 让WordPress支持含有?问号的永久链接、固定链接

这个东西搞了我一个早晨……

因为公司旧的博客网址基本都是 http://www.xxx.com/read.php?23

问号后是ID,新的博客用wordpress,所以在【设置】-【固定链接】-【自定义结构】 写:/read.php%post_id%

然后访问 http://localhost/wordpress/read.php?1

结果自动跳到

然后访问 http://localhost/wordpress/read.php/?1

http://blog.crazyphper.com/wp-content/uploads/2010/07/jump-150x107.jpg

多了一个斜杠,看工具提示301,是跳转,找原因……

这个肯定是WP的问题,开始摸WP源代码,采用逐步断点法(exit手动党飘过……)在include文件里一个劲的exit……复杂的地方echo“我是…函数”Orz……

经过不懈的努力,终于找到了……在template-loader.php文件里有一个:

do_action('template_redirect');

将它注释掉,就不会跳了……

然后是接收参数的问题,WP在我改【自定义结构】时,就创建了一个.htaccess文件。

内容很简单,就是将所有的链接请求发送到/wordpress/index.php 去,[L]意味着它是last,即最后一个rewrite规则,如果请求被此规则命中,将不会继续再向下匹配其他规则。

#BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress

因为URI里有问号(学过正则的都知道?的意思吧- -)的缘故,所以有点辣手。

自己尝试给?转义,也写了一些规则,例如:RewriteRule ^read.php\\?([\d]+)$ /wordpress/index.php?p=$1 [L]

这证明这些传统的方法都没用。

然后在我群员的提醒下,终于找到了正确的写法:(这证明我的群员都很厉害哈~)


# BEGIN WordPress

RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
RewriteCond %{QUERY_STRING} ^(\d+)$
RewriteRule ^(.*)read\.php$ $1test\.php?p=%1


# END WordPress

另一方面我已经修改了WP的一些处理URI的代码。

classes.php文件里,找到

$this->query_vars = apply_filters('request', $this->query_vars);

在它之前 print_r($this->query_vars); 可以看到WP需要的参数是否存在。

并且在这行之前加一段代码:

if(is_numeric($req_uri_array['1'])){
$this->query_vars = 'p='.$req_uri_array[1];
}

这里如果正确的话,应该是Array([p]=>[你的id])

所以我想尽办法在htaccess里做手脚。

基本上,这样一来只要htaccess写对,就能用含有问号的URL访问wordpress日志了……

写在最后必须要说的:

为什么我要折腾这么多?WP功能摆在那里,难道没有任何功效吗?——没错……WP没有任何功效,因为我这里情况较为特殊,有问号。

而WP不需要.htaccess文件的情况下,默认的访问网址是http://www.xx.com/?p=123 这个URL让我得到了启发,所以我将read.php?的请求转发为p?这样的,WP就会识别了。

写的不好请不要吐槽- -#

又不明白的童鞋可以留言~

赞赏
首页      程序开发      PHP      [原创] 让WordPress支持含有?问号的永久链接、固定链接
https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=256&r=g

团哥

文章作者

继续玩我的CODE,让别人说去。 低调,就是这么自信。

发表评论

textsms
account_circle
email

  • https://secure.gravatar.com/avatar/e71dffaa76b146a3e58ea1cd2ea3064a?s=80&r=g

    很好,就是有点复杂了…还要改WP哪,早知道叫你改url了,反正原来那个url的确不够友好的说~

    9年前回复
    • https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=80&r=g
      团团博主

      @fangfang: 直接改URL是起不了作用的- -||没看我最后写的那段话么……
      别人的东西拿来肯定是要改的,不然总是没法满足自己的需求。
      不过wordpress算是非常成熟的博客了,拿BO-BLOG(旧博客)和WORDPRESS给你改,你肯定选择改WORDPRESS。
      并且慢慢的喜欢上它。

      9年前回复
  • https://secure.gravatar.com/avatar/e71dffaa76b146a3e58ea1cd2ea3064a?s=80&r=g

    话说,你那个显示代码的,编辑器是什么啊?我那里怎么没有的?

    9年前回复

konakona

[原创] 让WordPress支持含有?问号的永久链接、固定链接
这个东西搞了我一个早晨…… 因为公司旧的博客网址基本都是 http://www.xxx.com/read.php?23 问号后是ID,新的博客用wordpress,所以在【设置】-【固定链接】-【自定义结构】 写:/re…
扫描二维码继续阅读
2010-07-09