【问题标题】:Php url shortener with static htmls带有静态 html 的 PHP url 缩短器
【发布时间】:2023-04-05 17:31:01
【问题描述】:

我的 htaccess:

RewriteEngine On
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php?l=$1 [L]

和php:

<?php
$links = parse_ini_file('links.ini');

if(isset($_GET['l']) && array_key_exists($_GET['l'], $links)){
header('Location: ' . $links[$_GET['l']]);
}
else
    include ('index.html');
?>

在 links.ini 我有短网址和网站网址:

youtube1 = "https://www.youtube.com/watch?v=9bZkp7q19f0"
youtube2 = "https://www.youtube.com/watch?v=wcLNteez3c4"
etc.

这些文件在根目录和 url 缩短工程中。

在 index.html 中,我有带有静态 html 页面的菜单:

<a href="/" >Home page</a>
<a href="page1" >page1</a>
<a href="page2" >page2</a>
etc.

但是当我点击它们时它只会重新加载 index.html?

如有任何帮助,将不胜感激!

我尝试将静态 html 链接放入 links.ini:

page1 = page1

但这也不起作用...我收到 页面未正确重定向错误。

【问题讨论】:

  • 你试过var_dump($links);吗?

标签: php html .htaccess url-shortener


【解决方案1】:

您可能想查看this simple url shortener,它与您正在执行的操作非常相似,但使用的是 json 而不是 ini 文件。

核心是.htaccess文件:

Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!index\.php).+)$ /index.php?short=$1 [NC,L,QSA]

【讨论】:

    【解决方案2】:

    所以我把 php 改成这样:

    <?php
    $links = parse_ini_file('links.ini');
    
    if(isset($_GET['l']) && array_key_exists($_GET['l'], $links)){
    header('Location: ' . $links[$_GET['l']]);
    }
    
    else if($_GET['l'] == 'index' | $_GET['l'] == 'page1' | $_GET['l'] == 'page2')
        include($_GET['l']. '.html');
    
    else if($_GET['l'] == '')
        include('index.html');
    
    else 
        include('404.html');
    
    ?>
    

    我不知道这有多优雅...... 如果有人知道更好的方法...

    【讨论】:

      【解决方案3】:

      当您查看错误消息时,您会注意到

      PHP 警告:语法错误,第 1 行的 links.ini 中出现意外的“=”\n 在第 2 行的 /var/www/example.com/index.php 中

      当查看 links.ini 时,您会在 URL 中看到第二个等号 =

      youtube1 = https://www.youtube.com/watch?v=9bZkp7q19f0

      所以引用值,例如

      youtube1 = "https://www.youtube.com/watch?v=9bZkp7q19f0"
      

      应该让它按预期工作。

      【讨论】:

      • 谢谢您,我添加了 youtube 链接作为示例。我遇到的问题是它没有打开 index.html 中的静态 html(菜单)。我认为 htaccess 规则可能是问题所在?
      • 不,他们不是。我将您的示例文件逐字复制到我的测试环境中,当我输入 http://www.example.com/youtube1 时,它会重定向到相应的 youtube 视频(当然,在引用 links.ini 之后)。所以代码有效,问题出在links.ini或index.html上。查看 error.log 以获得更多提示。
      猜你喜欢
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多