Htaccess URL重写id和名称

时间:2017-01-31 15:10:40

标签: .htaccess web

我有自己的网站,我想像stackoverflow那样

当您查看网址时,有一个很好的网址:https://stackoverflow.com/questions/40587870/javascript-variable-in-bootstrap-tooltip

当我只输入https://stackoverflow.com/questions/40587870时,它会将我发送到完整的网址。

这就是我现在所拥有的:http://www.exmaple.com/projects.php?id=1

我如何在自己的网站上进行此操作?

1 个答案:

答案 0 :(得分:1)

您需要某种数据库,将id映射到相应的slug。这可以像包含映射的文本文件一样简单,例如

  

41960970 htaccess-url-rewriting-id-and-name
  40587870 javascript-variable-in-bootstrap-tooltip

然后,您可以定义RewriteMap

RewriteMap id2slug txt:/path/to/file.txt

然后在规则中使用它

RewriteRule ^questions/([^/]+)$ /questions/$1/${id2slug:$1} [R,L]

此规则从请求中捕获id,然后将客户端重定向到附加了slug的相同URL。

您也可以使用其他表单,例如dbmdbd,甚至是提供映射的外部程序,而不是文本文件。

请注意,RewriteMap仅在主服务器或虚拟主机配置中可用。

如果您无法访问主配置,则可以使用执行重定向的脚本来模拟此配置,例如

RewriteRule ^questions/([^/]+)$ /id2slug.php?id=$1 [L]

并在脚本中从数据库中检索slug并发回

$id = $_GET['id'];
$slug = ...;
header('Location: http://www.example.com/questions/' . $id . '/' . $slug);