【问题标题】:RewriteRule, can't make it workRewriteRule,不能让它工作
【发布时间】:2012-09-23 11:34:14
【问题描述】:

网址: http://mysite.com/amember/login.php?amember_redirect_url=/ajax/?id=9999

我需要将其重写为: http://mysite.com/amember/login.php?amember_redirect_url=/?p=9999

我的意思是该类型的所有网址(最后带有 ID) 我的重写:

RewriteRule http://mysite.com/amember/login.php\?amember_redirect_url=/ajax/\?id=(.*) http://mysite.com/amember/login.php\?amember_redirect_url=\/?p=$1 [R=301,L]

到目前为止看起来是合法的,但它似乎没有工作......

在该行之前,我有以下 3 行:

RewriteEngine on
RewriteBase /
RewriteRule ^members/(.*) http://mysite.com/$1 [R=301,L]

更新。 试过这个:

RewriteRule /amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) /amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]

没用

RewriteRule ^amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) /amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]

要么

RewriteRule ^amember/login.php\?amember_redirect_url=/ajax/\?id=(\d+) http://mysite.com/amember/login.php?amember_redirect_url=/?p=$1 [R=301,L]

要么

更新:

RewriteCond %{QUERY_STRING} ^id=(.*)$ [NC]
RewriteRule /amember/login.php\?amember_redirect_url=/ajax/$ /amember/login.php\?amember_redirect_url=/?p=%1 [NC,R=301,L]

【问题讨论】:

  • 阅读,修复了代码,但仍然无法正常工作。用我现在拥有的内容更新第一篇文章。
  • RewriteCond %{QUERY_STRING} ^id=(.*)$ [NC] 这个条件不满足
  • 不知道该怎么办,尝试了很多不同的方法,仍然无法满足条件

标签: regex mod-rewrite url-rewriting rewrite url-rewrite-module


【解决方案1】:

您无法匹配RewriteRule 中的查询字符串。如果您请求 http://localhost/amember/login.php?something&foo,则传递给 RewriteRule 的 URI 仅是 /amember/logi.php,因此带有 \? 的任何内容都不会匹配,除非 URI 中有编码的 ?(通过 %3F)。

此外,您的查询字符串中有一个 single 参数:

amember_redirect_url = /ajax/?p=9999

查询字符串参数值中的? 本身并不是一个参数,因为它没有被& 分隔,所以你需要匹配它并重写它:

RewriteCond %{QUERY_STRING} (.*)amember_redirect_url=/ajax/(.*)
RewriteRule ^/?amember/login\.php$ /amember/login.php?%1amember_redirect_url=/%2 [L,R=301]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2015-08-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
相关资源
最近更新 更多