0

我做了一个简单的网址缩短器。我正在尝试让 .htaccess 重写一个看起来像这样的 url,http://chrismepham.com/q4IT612以便http://chrismepham.com/index.php?code=q4IT612它可以在将重定向到外部 url 的函数中使用。

这是我正在使用的 .htaccess 代码:

SetEnv TZ Europe/London
RewriteEngine on
RewriteRule ^([a-zA-Z0-9]+)$ index.php?code=$1

在我的索引页面的顶部,我有以下内容:

if(isset($_GET['code']) && !empty($_GET['code'])){
        $code = $_GET['code'];
        redirect($code);
        die();
    }

这是重定向功能:

function redirect($code){
//test the connection
    try{
        //connect to the database
        $dbh = new PDO("host;dbname=dbname","user", "pass");

    //if there is an error catch it here
    } catch( PDOException $e ) {
        //display the error
        echo $e->getMessage();
    }

    if(code_exists($code)){
        $stmt = $dbh->prepare("SELECT url FROM url_shortener WHERE code=?");
        $stmt->bindParam(1, $code);
        $stmt->execute();

        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

                $url = $row['url'];
        }
        header('Location: ' .$url);
    }
}

为什么不重写url?

谢谢

4

2 回答 2

0

我认为您的规则需要是:

RewriteRule ^/?([a-zA-Z0-9]+)$ index.php?code=$1

这使得前导斜杠是可选的;不同版本的 Apache 处理方式不同

于 2012-10-10T22:40:39.070 回答
0

您的 RewriteRule 需要在 index.php 前面加一个斜线:

RewriteRule ^([a-zA-Z0-9]+)$ /index.php?code=$1
于 2016-12-12T03:28:43.180 回答