如何在.htaccess文件中添加动态Slug?
实现短链接Slug访问的.htaccess配置方案
你需要在现有.htaccess内容基础上添加URL重写规则,将mysite.com/randomUrlId格式的请求转发到处理短链接的核心PHP文件,以此实现短链接跳转逻辑。
修改后的完整.htaccess内容
#+PHPVersion #="php74" AddHandler x-httpd-php74 .php #-PHPVersion #+OptionsIndexing #="1" Options +Indexes +FollowSymLinks IndexOptions +FancyIndexing #-OptionsIndexing # 开启URL重写引擎 RewriteEngine On # 仅对非真实文件/目录的请求执行重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将Slug参数传递给处理短链接的PHP文件(可替换为你的实际文件名,比如index.php) RewriteRule ^(.*)$ redirect.php?slug=$1 [L,QSA]
关键规则说明
RewriteEngine On:开启Apache的URL重写功能,这是实现Slug跳转的基础。RewriteCond两条规则:确保仅当请求的不是服务器上真实存在的文件或目录时,才执行重写,避免干扰静态资源(如CSS、图片)或已有页面的访问。RewriteRule:将请求路径中的Slug部分(如randomUrlId)作为slug参数传递给redirect.php,[L]表示这是最后一条执行规则,[QSA]表示保留原请求的查询参数(若有)。
后端处理示例
在redirect.php中,可通过$_GET['slug']获取传递的短链接ID,查询数据库后跳转至原URL:
<?php // 替换为你的数据库连接信息 $db = new mysqli('localhost', '数据库用户名', '数据库密码', '数据库名'); if (isset($_GET['slug'])) { $slug = $db->real_escape_string($_GET['slug']); $query = $db->query("SELECT original_url FROM short_links WHERE slug = '$slug'"); if ($query->num_rows > 0) { $row = $query->fetch_assoc(); // 301永久跳转,利于搜索引擎优化 header("Location: " . $row['original_url'], true, 301); exit; } else { // 短链接不存在时返回404 header("HTTP/1.0 404 Not Found"); echo "该短链接不存在"; } } ?>
内容的提问来源于stack exchange,提问作者Sambhav Khandelwal
相关产品推荐
相关产品推荐

