Rewrite URL in PHP


Rewrite URL in PHP

我想重写下面的URL

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

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

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

我怎么能做到这一点使用重写引擎在php?

要使重写规则工作,您必须将此添加到apache配置(在virtualhost块中):

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

RewriteRule基本上接受两个参数。第一个是描述它应该匹配什么的正则表达式。在这里,它正在寻找请求url的用户,如/<mypage>/<pid>/roleid/<rid>。第二个参数是它应该在服务器上执行请求的实际位置(在本例中,执行请求的是php文件)。它使用$1$2$3引用正则表达式中的组。

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

不,您不需要为每个php文件单独设置规则,您可以在regex中设置filename变量,如下所示:

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

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

然而,如果你想在PHP中生成漂亮的url(例如用于链接标签),那么你有两个选择:
    首先,你可以简单地直接构建URL(而不是转换),这在我看来是首选。
  • 第二,您可以将第一个(难看的)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);
    

祝你好运!