我想重写下面的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);
祝你好运!