在PHP中重写url后$ _GET问题

时间:2014-01-03 16:06:59

标签: php url-rewriting

我的原始网址为customers.php?id=3,我通过撰写$_GET['id']来获取客户ID。

现在我在htdocs中编写了重写规则,我的网址是customers/id/3。我试图通过$_GET['id']获取客户ID,但这不起作用。谁能告诉我怎么办才能获得身份证?

我的网址重写是

RewriteEngine On
RewriteRule ^customers/([^/]*)$ /customers.php?id=$1 [L]

4 个答案:

答案 0 :(得分:1)

你的重写规则是错误的;你正在捕捉customers/部分之后的所有内容,直到第一个正斜杠,然后你就不允许任何事情。

在您的示例中,规则甚至不会触发,因为您的网址后面有正斜杠和字符。

你应该改变:

RewriteRule ^customers/([^/]*)$ /customers.php?id=$1 [L]

类似于:

RewriteRule ^customers/id/(\d+).*$ /customers.php?id=$1 [L]
                               ^^ Allow for extra stuff after the id so you could add the name of your customer or something like that
                          ^^^^^ Require at least one digit and only digits

如果您愿意,也可以删除ID,以便在customer/之后直接输入该号码,但这取决于您。

答案 1 :(得分:0)

如果您使用:

customers.php?id=3

使用:

$_GET['id']

不是$ _GET ['customers']。

如果您想获得“客户”,请使用:customers.php?customers=3

你的改写将是这样的:

RewriteRule ^customers/id/([0-9]+)$ customers.php?id=$1 [L]

答案 2 :(得分:0)

有一种简单的方法可以解析该样式的网址(customer / id / 123):

$aUrlPieces = explode('/', $_SERVER['REQUEST_URI']);
print_r($aUrlPieces);

数组中的最后3个元素将是“customer”,“id”和“123”。

您可以更进一步,在应用程序中定义将采用相应数量参数的操作方法,这样您的网址将由PHP进行语法检查。

在这种情况下,操作方法“customer”将采用2个参数$identifier_type$identifier_value

这样,如果您不小心输入“customers /”而不是“customer /”,您将获得“Method not defined”异常。

答案 3 :(得分:0)

将您的重写规则更改为:

RewriteRule ^id/([^/]*)$ /customers.php?id=$1 [L]