url查询参数使用htaccess apache给出其他值

时间:2013-04-26 09:41:22

标签: php apache .htaccess

我正在学习.htaccess上的网址重写,还有哪些好书我可以学习。

我正在构建一个RESTfull webservices,我正在使用漂亮的网址

现在我在.htaccess文件中写下了以下语法来实现其他网址。

RewriteRule ([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/users/([0-9a-zA-Z]) users.php?key=$1&format=$2&uid=$3
RewriteRule ([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/users users.php?key=$1&format=$2

示例1

我尝试过网址,结果如下所述

e.g.    http://localhost/site/key/format/users/user_id


http://localhost/rest/r123/json/users/pGQqAMbVQAFx

test.php的

<?php print_r($_GET); ?>

只有keyformat的值不是uidkey的值是php而且我不知道php值是如何存在的< / p>

输出

Array
(
    [key] => php
    [format] => json
)

示例2

http://localhost/rest/r123/json/users/

输出

Array
(
    [key] => r123
    [format] => json
)

除了apache文档之外,是否还有关于为初学者重写URL的好书。

1 个答案:

答案 0 :(得分:1)

您的规则几乎没有问题。这是固定代码:

RewriteRule /([a-z0-9]+)/([a-z0-9]+)/users/([0-9a-z]+)/? users.php?key=$1&format=$2&uid=$3 [L,QSA,NC]
RewriteRule /([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/users/?$ users.php?key=$1&format=$2 [L,QSA,NC]

代码中的问题/修复:

  1. users/之后你有这个正则表达式:([0-9a-zA-Z])它将匹配单个字符,你可能意味着([0-9a-zA-Z]+)
  2. 您应该在每次重写规则后使用标志L(上一个规则),QSA(查询字符串附加),NC(忽略大小写)。
  3. 考虑使用结束锚$来避免匹配不需要的URI。
  4. 在正则表达式的开头使用/以避免匹配不需要的URI。
  5. 如上所述,您可以使用[A-Za-z0-9]并使用[a-z0-9]标记代替NC
  6. 详细了解mod_rewritw标志:https://httpd.apache.org/docs/current/rewrite/flags.html