Php url shortener with static htmls

时间:2017-02-05 13:34:37

标签: php html .htaccess url-shortener

我的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.

这些文件位于root和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

但是这也不起作用......我得到页面没有正确重定向错误。

3 个答案:

答案 0 :(得分:1)

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

  

PHP警告:语法错误,意外&#39; =&#39;位于第2行/var/www/example.com/index.php第1行\ n的links.ini中

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

  

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

所以引用该值,例如

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

应该按预期工作。

答案 1 :(得分:0)

所以我把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');

?>

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

答案 2 :(得分:0)

You might want to look at this simple url shortener, it's very similar to what you are doing, but with a json instead of an ini file.

The core is the .htaccess file:

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