使用PHP处理URL的URL缩短程序,如果别名不存在,则转到wordpress

时间:2014-09-02 04:41:18

标签: php wordpress redirect rewrite

我使用 Phurl网址缩短程序

有一个很好的用户界面来输入新的缩短网址。效果很好。

但我现在想使用相同的域来托管我的wordpress网站。因此,htaccess指出所有内容都将“.php”重定向为“别名”作为参数:

RewriteRule ^([a-zA-Z0-9_-]+)$ redirect.php?alias=$1

所以,如果我http://example.com/tt指向http://example.com/article-about-time-travel,那么“tt”将被传递给redirect.php,数据库中会有一个条目转为301到新的网址。

但如果它不在数据库中,

example.com/about 之类的东西,这是我的wordpress网站中的一个页面,我希望将其传递给wordpress。

但我不知道该怎么做。我不认为将这个逻辑放在htaccess中是可能的,因为可以有新的缩短网址和新的wordpress页面以及其他重写。

我的问题是:我不完全理解在wordpress中重写是如何工作的,所以我无法弄清楚如何只传递url以便可以通过wordpress将其重写为有用的东西。

  

我尝试使用header()函数但没有成功(主要是得到了)   无限重定向)。

任何想法???

感谢所有人。

编辑:这是我的.htaccess

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteOptions MaxRedirects=2
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-l
   RewriteRule ^([a-zA-Z0-9_-\w#]+)$ redirect.php?alias=$1
</IfModule>

1 个答案:

答案 0 :(得分:0)

我试图建议实现简单的include()

按原样保留RewriteRule,并通过加载WordPress调度程序(rewrite.php)脚本修改现有的index.php

<?php
// --rewrite.php-- (keep yours unchanged)
if ($r = db("SELECT url FROM shortener WHERE alias=?", $_GET->text["alias"])) {
    header("Location: $r[url]");
    exit;
}

// Fall through to WordPress if nothing matched:
unset($_GET["alias"]);
include("./index.php");
?>

忽略上面的代码,保持你的rewrite.php原样,然后只追加最后两行。只需确保header()仅屏蔽http_redirect() / exit调用,您的附加逻辑仍会运行。

用当前请求调用WordPress(没有internel / external重定向)。 WP可能会使用REQUEST_URI来确定请求哪个静态页面。