PHP所有带有mod_rewrite的GET参数

Posted

技术标签:

【中文标题】PHP所有带有mod_rewrite的GET参数【英文标题】:PHP all GET parameters with mod_rewrite 【发布时间】:2011-06-08 02:56:53 【问题描述】:

我正在设计我的应用程序。我应该做接下来的事情。在 mod_rewrite 的帮助下,所有 GET 参数 (?var=value) 都应该转换为 /var/value。我怎样才能做到这一点?我只有 1 个 .php 文件(index.php),因为我使用的是 FrontController 模式。你能帮我解决这个 mod_rewrite 规则吗?对不起我的英语。提前谢谢你。

【问题讨论】:

这对你和你的用户来说听起来都很可怕。通常,让您的路径看起来像指定内容的路径是一个好主意,但不理会其他参数。例如,您可能有 /content/5,而不是 /content.php?id=5。但是,如果您有一些选择,您可能想要执行 /content/5?opt1=something&opt2=something 之类的操作。 【参考方案1】:

AFAIK mod_rewrite 不处理问号之后的参数——重写规则的正则表达式行尾匹配“?”之前的路径结尾。因此,您几乎只能传递参数,或者在重写时完全删除它们。

【讨论】:

【参考方案2】:

我在使用“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 应该做什么。

【讨论】:

美丽。这正是我所需要的。【参考方案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。第二部分是重写的 URL,您可以使用$_GET 读出。 () 之间的所有内容都被视为变量。第一个是$1,第二个是$2。这样您就可以准确地确定变量在重写后的 URL 中的位置,从而知道如何检索它们。

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

这正是我想要的!谢谢!

以上是关于PHP所有带有mod_rewrite的GET参数的主要内容,如果未能解决你的问题,请参考以下文章

Apache mod_rewrite 和 PHP GET 数组

htaccess - mod_rewrite 将虚拟目录或文件作为参数传回 index.php?

如何使用 mod_rewrite 显示 SEO 友好的 URL?

使用 mod_rewrite 将带有哈希字符的路径转换为查询字符串

mod_rewrite 规则可以修改 PHP 中的 require_once 指令吗?

Mod_rewrite 和 $_GET 变量