在PHP中重写URL

时间:2011-12-01 08:31:28

标签: php mod-rewrite rewrite

我想重写以下网址

www.mysite.com/mypage.php?userid=ca49b6ff-9e90-446e-8a92-38804f3405e7&roleid=037a0e55-d10e-4302-951e-a7864f5e563e

www.mysite.com/mypage/userid/ca49b6ff-9e90-446e-8a92-38804f3405e7/roleid/037a0e55-d10e-4302-951e-a7864f5e563e

这里的问题是php文件可以是任何东西。我是否必须为.htaccess文件中的每个页面指定规则?

我怎么能用php中的重写引擎呢?

4 个答案:

答案 0 :(得分:2)

要使重写规则起作用,您必须将其添加到您的apache配置中(在虚拟主机块中):

RewriteEngine On
RewriteRule ^([^/]*)/userid/([^/]*)/roleid/(.*)$ /$1.php?userid=$2&roleid=$3 [L,NS]

RewriteRule基本上接受两个参数。第一个是描述它应匹配的正则表达式。在这里,它正在寻找请求/<mypage>/<pid>/roleid/<rid>之类的网址的用户。第二个参数是它应该在您的服务器上执行请求的位置(在这种情况下,它是您的php文件正在执行请求)。它使用$1$2$3返回正则表达式中的组。

答案 1 :(得分:0)

    RewriteEngine on
    RewriteBase /
    RewriteRule ^mypage\/userid\/(([a-z0-9]).+)\/roleid\/(([a-z0-9]).+)$ www.mysite.com/mypage.php?userid=$1&roleid=$2

答案 2 :(得分:0)

如果要将在浏览器中输入的后一个URL重写为第一种格式,则需要使用.htaccess文件。

但是,如果你想生成 PHP中的漂亮网址(例如用于链接标记),那么你有两个选择。

  • 首先,您可以直接构建网址(而不是转换),我认为这是首选。
  • 其次,您可以将第一个(丑陋)URL重写为后一个URL。然后,您需要在PHP中使用preg_replace()。有关详细信息,请参阅http://php.net/manual/en/function.preg-replace.php。基本上,你会想要使用像

    这样的东西
    $rewrittenurl = preg_replace("@mysite\.com\/mypage.php?userid=(([a-z0-9\-]).+)\&roleid=(([a-z0-9\-]).+)$", "mysite.com/userid/$1/roleid/$2", $firsturl);
    
祝你好运!

答案 3 :(得分:0)

不,你不需要为每个php文件单独的规则,你可以在你的正则表达式中使用这样的文件名变量:

RewriteRule ^(a-z0-9)/userid/([a-z0-9].+)/roleid/([a-z0-9].+)$ $1.php?userid=$2&roleid=$3