我知道在类似的问题上有上百万个类似的问题,但是显然我不了解很多,因为我无法得出我的简单问题(根据我的理解)的答案或解决方案。< / 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 /我的第一篇文章
谢谢。
答案 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];