0

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

wlatw.co/ RedirectName = 404 redirect redir.php?r= RedirectName redirect Page To Redirect To

a 重定向 b 重定向c

a 到 b 通过 .htaccess。redir.php 从 b 到 c。

因此,除非有人知道使用 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 循环中判断它是否成功并回显

4

2 回答 2

0

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

我修改了“漂亮的 URL”示例以供我使用:

RewriteRule ^([A-Za-z0-9-]+)/?$ redir.php?r=$1 [L]
于 2013-02-20T03:24:36.407 回答
0

您正在尝试做的事情并不完全按照您期望的方式工作。

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

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

于 2013-02-20T01:39:28.343 回答