如何从这个例子中使我的网址友好?

时间:2011-11-02 00:10:18

标签: .htaccess url friendly-url

我的网站目前显示如下(点击广告时):

hxxp://mysite.com/viewItem.php?id=10

我希望网址能够阅读:

hxxp://mysite.com/dogs/121/border-collie-for-sale-to-good-home  

其中“狗”永远是常数,121总是$ row ['postId'];和“边境牧羊犬出售到好家”总是我的行['标题'];

我知道这可能不会像在这里快速回答那么容易,但如果你能让我朝着正确的方向前进,我会很感激。我假设有一个改变.htaccess是有序的,我只是在试图破译那个很糟糕。

1 个答案:

答案 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时会发生这种情况:

  1. 浏览器位置栏显示http://mysite/viewItem.php?id=121请求发送到mysite并且访问viewItem.php
  2. viewItem.php的顶部看到没有rewritten参数,因此它将浏览器重定向到http://mysite/dogs/121/border-collie-for-sale
  3. 由于这是301重定向,因此浏览器的位置栏更改为http://mysite/dogs/121/border-collie-for-sale
  4. 请求重新发送给mysite,但这一次,.htaccess将/dogs/121/border-collie-for-sale重写为/viewItem.php?id=121&rewritten=true INTERNALLY,因此浏览器的位置栏不会更改。
  5. 请求将其返回到viewItem.php,这次,脚本看到有一个rewritten参数,并且通常是业务并且请求已提供
  6. 您可以使用所需参数标志的任何名称,只要没有脚本使用它。