【问题标题】:How to write expression to grab all after an expression and then rewrite in htaccess如何编写表达式以在表达式之后抓取所有内容,然后在 htaccess 中重写
【发布时间】:2019-09-30 11:39:39
【问题描述】:

一般来说,我是重写 url 和正则表达式的新手。我正在尝试重写 URL 以使其成为“漂亮的 url” 原来的网址是

/localhost/house/category.php?cat=lounge&page=1

我希望新网址如下所示:

/localhost/house/category?lounge&page=1

(就像我说的,我是新人,所以暂时不要试图太过分)

我设法得到的最接近的是:

RewriteRule ^category/(.*)$ ./category.php?cat=$1 [NC,L]

但这会复制整个 URL 并创建:

/localhost/house/category/house/category/lounge&page=1

我敢肯定,一定有一种简单的方法可以在那个表达式之后说全部复制,但我还没有设法到达那里。

【问题讨论】:

    标签: regex apache .htaccess url-rewriting


    【解决方案1】:

    感谢您的所有建议,我把它带回了这个

    重写规则类别/([^/])/([0-9])/?$ category.php?cat=$1&page=$2 [NC,L]

    这已经成功了,我现在就暂且不谈。

    【讨论】:

      【解决方案2】:

      我会尽力帮助你的:

      1. 您可能已经使用了,但请尝试使用 mod rewrite generatorhtaccess tester
      2. 来自this answer:查询(? 之后的所有内容)不是 URL 路径的一部分,如果不使用 [QSA],则无法通过 RewriteRule 指令进行传递或处理。
      3. 我建议使用 RewriteCond 和 using %1 instead of $1 for query string matches,而不是全部使用 RewriteRule。

      对于您的解决方案,请尝试:

      RewriteCond %{QUERY_STRING} ^(.*)$
      RewriteRule ^house/category$ house/category.php?cat=%1 [NC,L]
      

      这将插入.phpcat=,同时保留&page=


      预计您的下一步,下面的 mod 重写可能有助于开始转换

      http://localhost/house/category/lounge/1
      

      http://localhost/house/category.php?cat=lounge&page=1
      

      这里只需要 RewriteRule,不需要查询字符串:

      RewriteRule ^house/category/([^/]*)/([0-9]*)/?$ house/category.php?cat=$1&page=$2 [NC,L]
      

      使用regex101 获取有关这些正则表达式的更多帮助和详细说明。


      如果仍然无法正常工作,请继续使正则表达式更加宽松,直到它正确匹配:

      尝试删除 RewriteRule 中的 ^ 使其变为

      RewriteRule category$ category.php?cat=%1 [NC,L]
      

      然后它将在任何目录级别匹配该页面。然后添加回 house/ 并添加 /? 任何可选的前导/尾随斜杠可能会导致问题等。

      【讨论】:

      • 我尝试过使用生成器,但没有帮助。感谢测试仪的链接,我还没有找到一个和那个一样好的。不幸的是,您提供的解决方案不起作用。在网站上它没有任何效果,并且测试页面回复说不符合规则。
      • 抱歉,我必须修改 URL 域才能使其适用于该测试人员。它期待 localhost 或者它将您的输入域更改为:80。将 house/ 添加到 RewriteRule,因为我已经编辑添加到我的答案中。
      • 谢谢,你已经很好地预测了下一步,虽然我会推迟到那一步,因为我意识到我需要尝试学习一门课程,然后再尝试更多!看起来它应该在测试仪中工作,但由于某种原因仍然不在实际站点上。等孩子们上床睡觉后,我会玩一玩,看看出了什么问题。谢谢您的帮助。测试人员正在将 & 更改为 %26,URL 是否仍将其识别为 & 符号,它会识别 unicode 吗?还是这只是测试人员的症状
      • 我相信 & 被 %26 替换是测试人员的 PHP 症状,其他答案表明 & 字符可以用于 mod 重写。尝试我的最后一步,让匹配更宽松,玩弄它,最终你会得到匹配,即使你必须做 match .* 来重新路由一切!然后慢慢往回添加更多内容,直到您看到 URL 正在做什么。另外开启重写日志可能对你有很大帮助:stackoverflow.com/a/9632952/5514077
      • 谢谢,我带回去了:RewriteRule category/([^/]*)/([0-9]*)/?$ category.php?cat=$1&page=$2 [ NC,L] 成功了,谢谢你的帮助
      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多