使用 htaccess 在 URL 中获取两个变量

Posted

技术标签:

【中文标题】使用 htaccess 在 URL 中获取两个变量【英文标题】:Getting two variables in the URL with htaccess 【发布时间】:2011-02-03 21:53:25 【问题描述】:

通过htaccess获取URL中的两个GET方法是什么方法?

RewriteRule ^adm/(.*)$ adm.php?mode=$1

我已将其用于示例 URL:

http://www.domain.com/adm/thismode

现在我想获得两种方法,例如:

http://www.domain.com/adm/thismode/othermode

我试过了:

RewriteRule ^adm/(.*)$/(.*)$ adm.php?mode=$1&othermode=$2

但似乎不起作用......我该如何让它做到这一点?

编辑:

$mode1 = $_GET['mode'];

$mode2 = $_GET['othermode'];

像这样……

再次编辑:

http://www.domain.com/adm/generated/pass/6z9c4q9k8p

对...这是它必须做的URL

在 PHP 中它有这个:

if($mode == "generated")

我想让PHP看看是不是在URL中设置了模式,生成的密码是另一个GET

我把htaccess这样放:

RewriteRule ^adm/(.*)/(.*)$ adm.php?mode=$1&generated=$2

PHP 还会在 URL 中抓取生成的密码,并将其显示在页面上。

【问题讨论】:

我认为您需要用“GET 方法”以外的术语来描述您需要的东西,因为 GET 方法有其他含义:en.wikipedia.org/wiki/… 【参考方案1】:

在 Perl 兼容的 RegEx 中,$ 是一个锚点,表示“结束”。所以从你的模式中间删除$^adm/(.*)之后:

RewriteRule ^adm/(.*)/(.*)$ adm.php?mode=$1&othermode=$2

【讨论】:

+1,但不需要在上面的上下文中转义正斜杠(也可以完全省略美元符号)。 我再次编辑了帖子...在其他方面需要一些帮助 @ChristopheD - 酷!谢谢;我将删除“转义斜线”部分。【参考方案2】:

我不会在 .htaccess 中编写复杂的正则表达式,而是使用一个简单的

RewriteCond $1 !^adm\.php
RewriteRule ^adm/(.*)$ adm.php/$1 [L]

并在adm.php 中使用$_SERVER['PHP_SELF'],这样您就可以处理以adm 开头的任何类型的复杂URL,而无需更改.htaccess。

【讨论】:

【参考方案3】:

你现在遇到了什么问题 好像理查德得到了你需要的东西?

使用您的示例网址:

http://www.domain.com/adm/generated/pass/6z9c4q9k8p

以及您的 .htaccess 中的以下内容

RewriteRule ^adm/(.*)/(.*)/(.*)$ adm.php?mode=$1&generated=$2&pass=$3

那么你可以这样做:

$mode1 = $_GET['mode'];
$generated = $_GET['generated'];
$pass = $_GET['pass'];
if ( $mode1 == 'generated' && $generated == 'pass' ) 
    echo $pass;

或者这不是你的问题?

【讨论】:

以上是关于使用 htaccess 在 URL 中获取两个变量的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 获取整个查询字符串到一个变量

如何设置 htaccess 以从用户友好的 URL 获取参数以与 JS 一起使用

在 url 中隐藏获取变量

使用 htaccess 重写后,如何在 PHP 中获取可见 URL(不是实际 URL)? [复制]

使用 htaccess 在两个不同的文件中使用相同的 URL 格式

.htaccess 重写仍然可以使用 get 变量的漂亮 url