【问题标题】:Rewrite rules : forgetting a query string in .htaccess重写规则:忘记 .htaccess 中的查询字符串
【发布时间】:2013-07-23 17:57:49
【问题描述】:

我的.htaccess 里有这个

RewriteCond %{QUERY_STRING} ^(.*)?$
RewriteRule ^([0-9A-Za-z\-_]+)(/)?  index.php?action=view&type=page&page=$1&%1 [L]

但是当我把它放在浏览器中时:

http://localhost:8888/myapp/test%20doc

url转化为:

index.php?action=view&type=page&page=test

为什么我不应该得到:

index.php?action=view&type=page&page=test%20doc ?

【问题讨论】:

  • 空格不是你的模式的一部分 ....
  • 你的意思是用 url 进行测试:http://localhost:8888/myapp/test?doc
  • @Orangepill 你为什么说空格?顺便说一句,我已经编辑了我想得到index.php?action=view&type=page&page=test%20doc的帖子
  • %20 == space ...尝试将模式更改为^([0-9A-Za-z\-_ ]+)(/)?
  • 0-9A-Za-z\-_ 中的@Orangepill 空格无法识别

标签: php apache .htaccess url-rewriting


【解决方案1】:

为了便于阅读,请删除 RewriteCond 并将 QSA(查询字符串附加)标志添加到您的 RewriteRule

RewriteRule     ^([\w-]+)/?    index.php?action=view&type=page&page=$1 [QSA,L]

您正在测试的网址 (http://localhost:8888/myapp/test%20doc) 没有查询字符串。你的意思是测试:

http://localhost:8888/myapp/test?doc

编辑

您的问题与查询字符串无关。只有你没有匹配你的字符类中的空格字符并且你打算匹配的事实。只需在您的角色类中添加一个空格。这也应该适合你:

^([ \w-]+)/?

\w 只是 0-9A-Za-z_ 的简写

【讨论】:

  • 我编辑了我的帖子,因为我弄错了,实际上我想获取 index.php?action=view&type=page&page=test%20doc
  • 无法识别^([ \w-]+)/? 中的空白
  • @user1611830 不被识别是什么意思?它可能会破坏编辑器中的语法突出显示,但就 Apache 而言它应该可以正常工作。
  • @user1611830 嗯...有趣。据我所知,空格字符不需要转义,但如果它有效,也许我需要阅读一下。不管怎样,我很高兴你能成功。干杯!
猜你喜欢
  • 2011-04-18
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
相关资源
最近更新 更多