【问题标题】:RewriteRule that preserves GET parameters保留 GET 参数的 RewriteRule
【发布时间】:2011-03-20 07:11:28
【问题描述】:

这个重写规则有什么问题?

RewriteRule ^api/(.+)$ api/index.php?url=$1 [L]

我只是想在 api/ 之后和其余的 get 参数之前添加“index.php?url=”。

api/image/upload&arg1=1&text=lorem+ipsum

api/index.php?url=image/upload&arg1=1&text=lorem+ipsum

(.+) 在 api/ 之后获取所有内容有什么问题?

【问题讨论】:

  • ^api/([a-zA-Z0-9/_\&\=\%]+)$ 有效,但不适用于不同语言的特定字符,如 åäöøæé 等等...这就是为什么我希望 ^api/(.+)$ 代替工作。 .应该表示除换行符或字符串结尾之外的任何字符,所以我不明白为什么它不起作用。

标签: .htaccess mod-rewrite apache2 get


【解决方案1】:

RewriteRule 上的正则表达式仅针对 URL 的路径部分运行,而不是查询参数。幸运的是,有[QSA] flag 可以保留现有的查询参数。

【讨论】:

【解决方案2】:

你在做些什么来阻止无限递归吗?

 RewriteRule ^api/(.+)$ api/index.php?url=$1 [R=301,L]

或类似的

【讨论】:

  • 我之前有 [L] 但它没有任何区别。我的问题是 apache2 报告唯一的 get 参数是 [url] => index.php ,所有其他参数都消失了,url 参数应该是 'image/upload'。当我使用规则 ^api/([a-zA-Z0-9/_]+)$ 而不是 url 参数是 'image/upload' 但我放弃了所有其他 GET 参数。
  • 我也不想做重定向,只是获取 api/ 和第一个 & 之前的文本,以获取以“index.php?url=”为前缀的字符串和其余部分GET 参数保留
  • R=301 在这里如何工作?它不在httpd.apache.org/docs/2.0/mod/mod_rewrite.html的文档中@
  • 在该页面上搜索“'redirect|R [=code]'(强制重定向)”。如果您想为重定向指定确切的 HTTP 响应代码。
【解决方案3】:

我认为您必须在正则表达式之前写下您的域名。像这样:

RewriteRule ^(.+).com/api/(.*)$ "$1.com/api/index.php?url=$2" [R=301,L]

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2016-12-20
    • 2015-10-14
    相关资源
    最近更新 更多