简介:我正试图使用数据库和php建立一个简短的URL系统。然而,我发现了一种使用.htaccess文件、regex和本地配置文件的更短/更快的方法。然而,本教程并没有提供太多的支持或解释,这是我看到的第一个URL重写实例。
以下是php脚本的代码,用于将参数传递到页面中:
<?php
$links = parse_ini_file('links.ini');
if(isset($_GET['l']) && array_key_exists($_GET['l'], $links))
{
header('Location: ' . $links[$_GET['l']]);
}
else
{
header('HTTP/1.0 404 Not Found');
echo 'Unknown link.';
}
?>
换句话说,它会检查传递的参数是否在静态配置文件中(例如谷歌:http://example.com/index.php?l=google),如果是的话,那么当然会将他们重新引导到现场。配置文件内容:
google = https://www.google.com/
fb = https://www.facebook.com/
合乎逻辑。能够理解它是如何工作的。然而,我的问题是上面提到的.htaccess文件。我只接触过regex,并计划学习更多。然而,目前我还不够熟练,无法真正理解编写需要实现的内容所需的语法。需要做的是,用户基本上输入www.example.com/url/google,然后将其重定向到www.example.com/url/index.php?l=谷歌-这是我一直无法开始工作的事情,我只是收到了web服务器配置错误。.htaccess:的配置文件
RewriteEngine On
RewriteCond $1 !^(index'.php)
RewriteRule ^(.*)$ index.php?l=$1 [L]
有人能就问题的原因提出建议吗?很抱歉对正则表达式部分缺乏理解。我正在努力提高它的技能。我只想把它修复好,这样我就可以继续我的项目了,因为这只是其中的一小部分。
非常感谢。
这将重定向它:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/url/([a-z]+)$ [NC]
RewriteRule ^ /url/index.php?l=%1 [R=301,L]
RewriteCond $1 !^(index'.php)
RewriteRule ^(.*)$ index.php?l=$1 [L]