【问题标题】:Having trouble with .htaccess and clean URLs, need redirect on entering the "dirty" URL.htaccess 和干净的 URL 有问题,需要在输入“脏”URL 时重定向
【发布时间】:2019-06-07 19:14:56
【问题描述】:

我知道关于这样的问题有一百万个类似的问题,但显然有很多我不明白,因为我无法为我(据我所知)相当简单的问题得出答案或解决方案。

基本上,我正在尝试备份一个旧网站,但这次想要更专业的外观,包括清理 URL。一个典型的页面如下(目前在本地托管,但将在未来几天内分配一个域):

192.168.0.200/album-reviews.php?albid=22

使用以下代码,我已经能够通过在浏览器中手动输入 192.168.0.200/album-reviews/22 来实现上述示例页面加载:

RewriteRule ^album-reviews/([0-9a-zA-Z]+) album-reviews.php?albid=$1 [NC,L]

但是,我还想要当在我的网站上点击链接时,它会将用户定向到 /album-reviews/22 而不是 album-reviews.php?albid=22。目前获得干净 URL 的唯一方法是将其手动输入栏中,我网站上的链接没有得到干净的 URL,我一直在使用的代码(并且一直无法工作)基于我发现的来源是这样的:

RewriteCond %{THE_REQUEST} /album-reviews/?(?:\.php)?\?albid=([0-9a-zA-Z]+)
RewriteRule ^ /album-reviews/%1? [L,R]

因此,如果有人能阐明我如何让所有这些工作按要求进行,我将不胜感激,我希望我的问题得到了适当的阐述。

附带说明,如果我也想在 URL 中包含帖子标题,如下所示:

192.168.0.200/album-reviews.php?albid=22&ptitle=我的第一篇文章

如何改变任何代码使其变成这样:

192.168.0.200/album-reviews/22/我的第一篇文章

谢谢。

【问题讨论】:

标签: php regex .htaccess url


【解决方案1】:

你可以使用:

Options -MultiViews
RewriteEngine on

RewriteCond %{THE_REQUEST} /album-reviews/?(?:\.php)?\?albid=([^\s&]+)&ptitle=([^\s&]+)
RewriteRule ^ album-reviews/%1/%2? [L,R=301]
RewriteCond %{THE_REQUEST} /album-reviews/?(?:\.php)?\?albid=([^\s&]+)
RewriteRule ^ album-reviews/%1? [L,R=301]

RewriteRule ^album-reviews/([^/]+)/?$ album-reviews.php?albid=$1 [NC,L]
RewriteRule ^album-reviews/([^/]+)/([^/]+)/?$ album-reviews.php?albid=$1&ptitle=$2 [NC,L]

【讨论】:

    【解决方案2】:

    如果你想在http://yoursite.com/album-reviews/22的url上显示http://yoursite.com/album-reviews.php?albid=22的内容,你需要这些代码:

    您的 htaccess 需要以下几行:

    RewriteEngine On
    Options -Indexes
    RewriteRule ^album-reviews/(.*)$ album-reviews.php?pretty=$1 [L,QSA]
    

    还有你的 PHP 这些:

    $pretty = $_GET['pretty'];
    $parameters = explode('/',$pretty);
    $albid = $parameters[0];
    

    您的用户不会被重定向,您的网站将直接在漂亮的 url 处显示页面。

    现在,发生了什么?您指示 htaccess 在专辑评论之后将所有内容作为称为“漂亮”的 GET 参数发送。然后在您的 PHP 中,您为其中出现的每个 / 剪切它,这样您就形成了数组 $parameters。所以你甚至可以得到更多的参数,对于每一个/,它们都在数组$parameters中:

    $second_parameter = $parameters[1];
    $third_parameter = $parameters[2];
    $fourth_parameter = $parameters[3];
    

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      相关资源
      最近更新 更多