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 将带有哈希字符的路径转换为查询字符串