PHP使用mod_rewrite的所有GET参数

时间:2011-01-12 20:59:42

标签: php apache url .htaccess mod-rewrite


我正在设计我的申请。我应该做下一件事。在mod_rewrite的帮助下,所有GET参数(?var = value)都应转换为/ var / value。我怎样才能做到这一点?我只有1个.php文件(index.php),因为我使用了FrontController模式。你能帮我解决这个mod_rewrite规则吗?

抱歉,我的英文。提前谢谢。

4 个答案:

答案 0 :(得分:6)

我在使用“seo友好”网址的网站上执行此类操作。

在.htaccess中:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]

然后在index.php上:

if ($_SERVER['REQUEST_URI']=="/home") {
    include ("home.php");
}

.htaccess规则告诉它如果找不到要求的文件或目录,则加载index.php。然后你只需要解析请求URI来决定index.php应该做什么。

答案 1 :(得分:5)

.htaccess中的以下代码将重写您的网址,例如: /api?other=parameters&added=true/?api=true&other=parameters&added=true

RewriteRule ^api/           /index.php?api=true&%{QUERY_STRING} [L]

答案 2 :(得分:3)

<强>的.htaccess

RewriteEngine On

# generic: ?var=value
# you can retrieve /something by looking at $_GET['something']
RewriteRule ^(.+)$ /?var=$1

# but depending on your current links, you might
# need to map everything out. Examples:

# /users/1
# to: ?p=users&userId=1
RewriteRule ^users/([0-9]+)$ /?p=users&userId=$1

# /articles/123/asc
# to: ?p=articles&show=123&sort=asc
RewriteRule ^articles/([0-9]+)/(asc|desc)$ /?p=articles&show=$1&sort=$2

# you can add /? at the end to make a trailing slash work as well:
# /something or /something/
# to: ?var=something
RewriteRule ^(.+)/?$ /?var=$1

第一部分是收到的URL。第二部分是您可以使用$_GET读取的重写URL。 ()之间的所有内容都被视为变量。第一个是$1,第二个是$2。这样,您就可以确定变量应该在重写的URL中的确切位置,从而知道如何检索它们。

您可以使用(.+)保持一般性并允许“一切”。这仅仅意味着:任何字符(+)中的一个或多个(.)。或者更具体,例如只允许数字:[0-9]+(0到9范围内的一个或多个字符)。您可以在http://www.regular-expressions.info/上找到有关正则表达式的更多信息。这是一个测试它们的好网站:http://gskinner.com/RegExr/

答案 3 :(得分:1)

AFAIK mod_rewrite不处理问号后的参数 - 重写规则的regexp end-of-line与'?'之前的路径末尾匹配。所以,你几乎只限于传递参数,或者在重写时完全丢弃它们。