我正在学习.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
我尝试过网址,结果如下所述
e.g. http://localhost/site/key/format/users/user_id
http://localhost/rest/r123/json/users/pGQqAMbVQAFx
<?php print_r($_GET); ?>
只有key
和format
的值不是uid
而key
的值是php
而且我不知道php值是如何存在的< / p>
Array
(
[key] => php
[format] => json
)
http://localhost/rest/r123/json/users/
Array
(
[key] => r123
[format] => json
)
除了apache文档之外,是否还有关于为初学者重写URL的好书。
答案 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]
代码中的问题/修复:
users/
之后你有这个正则表达式:([0-9a-zA-Z])
它将匹配单个字符,你可能意味着([0-9a-zA-Z]+)
$
来避免匹配不需要的URI。[A-Za-z0-9]
并使用[a-z0-9]
标记代替NC
。详细了解mod_rewritw标志:https://httpd.apache.org/docs/current/rewrite/flags.html