在URL中传递多个值时,在PHP中重写URL

时间:2013-01-31 23:53:08

标签: php mod-rewrite

我目前正在研究如何使用Mod重写修改php中的URL。

典型的网址可能如下所示:

http://www.fitness.com/find_a_pt/?county=&constituency=211&gender=&action=search

现在在上面的例子中,只选择了一个选区。没有指定县或性别。

现在上述选区指的是'达特福德'。

如果网址为:

,那就好了

http://www.fitness.com/find_a_pt/dartford

现在增加的复杂性是性别可能是:

1)未选中 - 根据上面的网址

2)男性

http://www.ego3fitness.com/find_a_pt/?county=&constituency=211&gender=1&action=search

3)女性

http://www.ego3fitness.com/find_a_pt/?county=&constituency=211&gender=&actiom=search

所以网址需要阅读:

1)http://www.fitness.com/find_a_pt/dartford

2)http://www.fitness.com/find_a_pt/dartford/male

3)http://www.fitness.com/find_a_pt/dartford/female

首先,有可能通过URL重写这一点,如果是这样,有人可以提供一个例子供我工作。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我总是使用相同的mode_rewrite规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

有了这个规则,所有内容都被转发为index.php。 所以你可以自由地用PHP实现每个url逻辑。

您可以使用$_SERVER['REQUEST_URI']获取请求,并执行任何操作。

很高兴有一个带有正则表达式规则的Routing类来解析uri。 查看示例here并阅读 像Zend,Code Igniter等大型框架如何做到这一点。 (顺便说一下,我提供的重写规则来自Zend Framework)