【问题标题】:Redirect exactly null query string完全重定向空查询字符串
【发布时间】:2015-06-28 23:34:12
【问题描述】:

我的网络服务器上有很多网站。

当 url 正好是 /? 时,我只想重定向我的所有网站

例如:

  • www.example1.com/?
  • www.example2.com/?

但不像www.example.com/x.php?www.example.com/ 或其他任何东西。

我尝试了很多事情但都失败了:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^ %{REQUEST_URI}?_test [L,R=302]

RewriteCond %{QUERY_STRING} ^\?$
RewriteRule  ^ http://www.example.com [L,R=301]

RewriteCond %{REQUEST_URI} =="/?"
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]

【问题讨论】:

    标签: apache .htaccess httpd.conf


    【解决方案1】:

    您可以使用以下代码来做到这一点。

    RewriteEngine On
    RewriteRule ^\?$ http://www.example.com/ [L,R=301]
    

    您将规则定义为以 ?并以那个符号结束。

    【讨论】:

    • RewriteEngine On RewriteCond %{REQUEST_URI} ="/?" RewriteRule ^(.*)$ example.com/$1 [L,R=301] 这对我有用 sagolasin kardesim
    • @Huseyin ^\?$ - 这在RewriteRule 模式中永远不会匹配,因为文字?(问号)不是URL路径的一部分RewriteRule pattern 匹配。匹配的 URL 路径明显排除了查询字符串,包括 ? 前缀。
    • @MustafaMarsliTopaloğlu 如果? 是请求中的文字问号,那么%{REQUEST_URI} ="/?" 也不会匹配? REQUEST_URI Apache 服务器变量不包括 ? - 表示查询字符串的开始。为了匹配对空查询字符串的请求(即/?),您需要匹配THE_REQUEST
    【解决方案2】:

    要重定向空查询字符串(即,当 URL 仅以 ? 结尾时),您需要检查 THE_REQUEST

    RewriteRule 模式与 URL 路径匹配,这明显排除了查询字符串(包括 ?)。

    REQUEST_URI server 变量也省略了查询字符串和任何尾随 ?。 (请注意,这与 PHP 中的 $_SERVER['REQUEST_URI'] 变量不同,后者确实包含完整的请求 URL。)

    并且QUERY_STRING 变量为空,无论是否存在尾随?

    因此,为了删除(即重定向)URL 末尾的尾随?,您可以执行以下操作:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.+)\?\ HTTP/
    RewriteRule ^ %1? [R,L]
    

    RewriteRule 替换 (%1?) 末尾的尾随 ? 实际上并不存在于结果 URL 中,但为了删除整个查询字符串是必需的。或者,如果您使用的是 Apache 2.4+,则可以改用 QSD(查询字符串丢弃)标志:

    RewriteRule ^ %1 [R,L,QSD]
    

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 2017-04-21
      • 2011-01-30
      • 1970-01-01
      相关资源
      最近更新 更多