如果找不到重定向

时间:2013-02-20 00:42:17

标签: php .htaccess

我有一个名为“wlatw.co”的域名(和.com)('哇!看看这个网站!'),让我和我的一些朋友缩短网址。我刚刚将它从一个处理一些粗略的javascript的慢速版本升级到一个超快速的PHP header()重定向。它曾经是这样的:“r.wlatw.co/alca”,但我更喜欢“wlatw.co/alca”。我希望.htaccess重定向丢失的页面,例如“/ alca”(因为它不存在于服务器上),重定向到“wlatw.co/redir.php?r=alca”,它将从中重定向。 (在引号之外加上逗号和句号,以免混淆某人:))

wlatw.co/ RedirectName = 404 重定向 redir.php?r = RedirectName 重定向 页面重定向到

a 重定向 b 重定向 c

a到b by .htaccess。从b到c由redir.php。

因此,除非有人知道使用htaccess读取XML的某种方式,否则我更喜欢这种方法!


XML设置示例:

..如果需要(或供有人经过参考)

<redirect>
    <short>
        <name>alca</name>                     <!-- like wlatw.co/alca -->
        <creator>255.255.255.255</creator>    <!-- ip address or username -->
        <date>1/6/13</date>                   <!-- the date! -->
        <time>10:52PM</time>                  <!-- the time! -->
        <url>http://www.alcadesign.com/</url> <!-- where to go to -->
    </short>
</redirect>

PHP:

这是 redir.php

<?php
    if(file_exists('redirects.xml')) {
        $xml = simplexml_load_file('redirects.xml');
        if(isset($_GET['r']) && $_GET['r'] != '' && !is_array($_GET['r'])) {
            foreach($xml->short as $shorts) {
                if($shorts->name == $_GET['r']) {
                    header('Location: '.$shorts->url);
                    break;
                }
            }
        }
        else {
            header("refresh:2;url=http://www.wlatw.co/");
            echo '<div align="center" style="font-weight: bolder; font-size: 24px;">Malformed URL</div><div align="center" style="font-weight: bolder; font-size: 16px;">Redirecting...</div>';
        }
    }
?>

与PHP有关,如果有人知道如何告诉foreach循环它是否成功并且回显

2 个答案:

答案 0 :(得分:0)

你要做的事情并不像你期望的那样完成。

.htaccess是Apache的一部分,它在PHP执行时完成了它的工作。没有办法回去重新加载页面.htaccess

如果您已经在PHP文件中,并且已经在$_GET['r']中拥有了所需的内容,那么在确定XML中不存在该条目后,只需include('redir.php');

答案 1 :(得分:0)

似乎没有人回答正确的答案,所以我环顾四周并找到了这个备忘单: http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/pdf/

我为我的用法修改了“好看的网址”示例:

RewriteRule ^([A-Za-z0-9-]+)/?$ redir.php?r=$1 [L]