如何让这个例子让我的网站更友好?
问题描述:
我的网站当前显示这样的(上点击广告时):如何让这个例子让我的网站更友好?
hxxp://mysite.com/viewItem.php?id=10
我喜欢的网址为:
hxxp://mysite.com/dogs/121/border-collie-for-sale-to-good-home
,其中“狗”永远是一个常数,121总是$ row ['postId'];和“边境牧羊犬出售至好家园”总是我的$ ['title'];
我知道这可能不会像在这里的快速答案那么容易,但如果你能让我走向正确的方向,将不胜感激。我假设.htaccess的更改是按顺序进行的,我试图破译该文件非常糟糕。
答
你可以做的事情是在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”是viewItem的“id” .PHP脚本有:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]+/([^/]+)/ /viewItem.php?id=$1&rewritten=true [L]
如果你离开了&rewritten=true
那里,它会进入一个重定向循环也可以在规则的括号内添加QSA
,如果你想传递下去其他查询字符串。重写以防万一你想能够处理友好的URL,如:http://mysite/dogs/121/border-collie-for-sale/?sort=asc With [L,QSA]
,“sort = asc”被传递给viewItem/php。
所以这就是现在发生的事情,当有人点击广告和被采取http://mysite/viewItem.php?id=121:
- 浏览器的地址栏中说
http://mysite/viewItem.php?id=121
请求被发送到mysite的和viewItem.php访问 - 顶部viewItem.php的看到,没有
rewritten
PARAM,所以浏览器重定向到http://mysite/dogs/121/border-collie-for-sale - 因为这是一个301重定向,浏览器的地址栏更改为http://mysite/dogs/121/border-collie-for-sale
- 热曲est被重新发送给mysite,但是这一次,.htaccess会将
/dogs/121/border-collie-for-sale
重写为/viewItem.php?id=121&rewritten=true
INTERNALLY,因此浏览器的位置栏不会更改。 - 请求使它回到viewItem.php,此时,脚本看到有一个
rewritten
参数,并执行它的平常业务和请求送达
您可以使用任何名称为参数只要没有任何脚本正在使用它,就可以使用标志。
mapfiles将对此有所帮助 – david
mapfiles?我很确定这是一个htaccess问题,但是mapfiles是什么? – Andi
http://httpd.apache。org/docs/current/mod/mod_rewrite.html#rewritemap – david