我的网站目前显示如下(点击广告时):
hxxp://mysite.com/viewItem.php?id=10
我希望网址能够阅读:
hxxp://mysite.com/dogs/121/border-collie-for-sale-to-good-home
其中“狗”永远是常数,121总是$ row ['postId'];和“边境牧羊犬出售到好家”总是我的行['标题'];
我知道这可能不会像在这里快速回答那么容易,但如果你能让我朝着正确的方向前进,我会很感激。我假设有一个改变.htaccess是有序的,我只是在试图破译那个很糟糕。
答案 0 :(得分:0)
您可以做的是在viewItem.php脚本的顶部添加重定向。此重定向将需要检查您用于指示.htaccess文件是否已重写的查询参数。像这样:
if( !isset($HTTP_GET_VARS['rewritten']) ) {
// use whatever behind the scenes stuff you need to construct the friendly URL
$friendly_url = "http://mysite/" . getCategory() . "/" . getID() . "/" . getTitle();
// Now redirect the browser:
header("HTTP/1.1 301 Moved Permanently");
header("Location: $friendly_url");
exit();
}
// business as usual, the rest of your viewItem.php script.
因此,当这个php脚本试图处理查询字符串中没有rewritten
参数的请求时,它会重定向到友好版本的URL。如果它具有rewritten
它会执行它通常做的事情并处理请求。
现在在.htaccess文件中,您想要将丑陋的URL重写为友好的URL,但是您需要在重写中包含rewritten
(我假设示例中的“121”是“id” viewItem.php脚本采用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]+/([^/]+)/ /viewItem.php?id=$1&rewritten=true [L]
如果你遗漏&rewritten=true
,那么它将进入重定向循环。如果您希望能够处理友好的URL,例如:http://mysite/dogs/121/border-collie-for-sale/?sort=asc QSA
,您还可以在规则的括号中添加[L,QSA]
。 ,“sort = asc”被传递给viewItem / php。
所以现在当有人点击广告并被带到http://mysite/viewItem.php?id=121时会发生这种情况:
http://mysite/viewItem.php?id=121
请求发送到mysite并且访问viewItem.php rewritten
参数,因此它将浏览器重定向到http://mysite/dogs/121/border-collie-for-sale /dogs/121/border-collie-for-sale
重写为/viewItem.php?id=121&rewritten=true
INTERNALLY,因此浏览器的位置栏不会更改。rewritten
参数,并且通常是业务并且请求已提供您可以使用所需参数标志的任何名称,只要没有脚本使用它。