【问题标题】:url query parameters gives other values with htaccess apacheurl 查询参数使用 htaccess apache 给出其他值
【发布时间】:2013-04-26 09:41:22
【问题描述】:

我正在学习 .htaccess 上的 url 重写,有什么好书可以学习。

我正在构建一个 RESTfull 网络服务,并且正在使用漂亮的网址

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

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 值是如何产生的

输出。

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

示例 2

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

输出

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

除了 apache 文档之外,对于初学者来说,还有什么关于 url 重写的好书。

【问题讨论】:

  • 试过了..不工作
  • 专业提示: 不要为多个 URL 编写多个重写规则。为所有 URL 编写一个 RewriteRule。然后使用 PHP 脚本进一步解析传入的请求。
  • 顺便说一句,您的问题描述有问题。 modrewrite 没有“错误值”之类的东西。该软件可以正常工作,并且记录了它的作用。因此,在网站上 99.9% 的案例中,不是 modrewrite 出错,而是用户在不理解的情况下使用它。并尝试围绕 apache 文档(根据它编写您自己的教程),它非常完整,应该是您的第一站。只是说,这就是我可以轻松地在多个服务器版本之间进行更改的方法(好吧,这不是真的:),但它确实有效)。
  • 我不会撒谎我对为什么给出错误的值有点困惑。但是在研究了 URL 重写之后,我可以推荐一些您可能会觉得有用的好网站和/书籍。 Url Rewriting for Beginners (Online Resource) Some Examples You may find useful. [一本有用的书,我仍然在很多与 Apache 相关的 SEO 中使用它。 ](amzn.to/11pgwbF) 希望其中一些帮助以供将来参考,并且某些人能够帮助您我

标签: php apache .htaccess


【解决方案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-z0-9]NC 标志来代替[A-Za-z0-9]

阅读有关 mod_rewritw 标志的更多信息:https://httpd.apache.org/docs/current/rewrite/flags.html

【讨论】:

  • 修复它以进行复制和粘贴是徒劳的。你会为让其他用户保持沉默而自豪吗?
  • @hakre,别误会,伙计,我仍在花时间列出所有修复它的原因。
  • 嗯,你必须拥有一些超能力,比如知道需要 QSA。 OP 还写了他对 Apache 手册有问题,所以仅仅列出标志不会告诉他太多。但我稍后会查看您的问题,以便如果我发现它不再存在,我可以拿回我的 DV。
  • @hakre: Well, you must have some super-powers,你是SO的资深专家,我可以知道这种语气的原因吗?我没有任何这样的权力,在 OP 的代码中发现了一些错误并修复了它,并提供了我修复它的理由。我看不出有什么问题。
  • 错与对在旁观者眼中是如此多,所以我们不应该对此做出太多判断。对不起,如果我的语气冒犯了你,请放心,这是出于好意,根本不会冒犯你。我对您的回答,尤其是编辑通常很好。我刚刚评论了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
相关资源
最近更新 更多