.htaccess和干净的URL遇到问题,在输入“脏” URL时需要重定向

时间:2019-01-13 16:09:11

标签: php regex .htaccess url

我知道在类似的问题上有上百万个类似的问题,但是显然我不了解很多,因为我无法得出我的简单问题(根据我的理解)的答案或解决方案。< / p>

基本上,我正在尝试备份一个旧站点,但是这次希望它具有更专业的外观,其中包括清理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/相册评论/ 22 /我的第一篇文章

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用:

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]

答案 1 :(得分:0)

如果要在URL http://yoursite.com/album-reviews.php?albid=22上显示http://yoursite.com/album-reviews/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在专辑审阅后将所有内容作为称为“ pretty”的GET参数发送。然后,在您的PHP中,针对其中出现的每个/对其进行剪切,从而形成数组$parameters。因此,您甚至可以获得更多参数,对于每个/,它们都在$ parameters数组中:

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