【问题标题】:Redirect loop while looking for uri that does NOT contain specific string查找不包含特定字符串的uri时重定向循环
【发布时间】:2021-06-30 09:04:21
【问题描述】:

我有一个网站可以说https://example.com/,我想将每个不以/something 开头的网址重定向到https://example.com/something/

我使用的是 Apache 2.4.29(托管),我的 .htaccess 看起来像这样。

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/something(.*)$ [NC]
RewriteRule ^(.*)$ /something/ [R=302,NC,L]

我的问题是,当我在主页 (/) 或任何其他页面上时,我被重定向到 /something/,这是正确的,但是当我在 /something/ 上时,我仍然被重定向到 @ 987654331@ 并循环直到出现 ERR_TOO_MANY_REDIRECTS 错误。

Here 是指向 htaccess 测试器的链接,它表明这应该可以工作,并且当我已经在这里时不应该将我重定向到 /something/,但在我的主机上并非如此。

我关注了thisthis 的问题,但没有成功。

【问题讨论】:

    标签: .htaccess redirect mod-rewrite url-rewriting


    【解决方案1】:

    根据您显示的尝试,请尝试以下规则。如果您已经有现有规则,请将它们放在 htaccess 规则文件的顶部。

    请确保在测试您的 URL 之前清除您的浏览器缓存。

    RewriteEngine On
    
    RewriteCond %{REQUEST_URI} !^/?$
    RewriteCond %{THE_REQUEST} !something [NC]
    RewriteRule ^ /something? [R=302,NC,L]
    

    【讨论】:

    • 检查但没有成功。当我从第一个 RewriteCond 中删除 ! 时,我正在重定向到 /something/ 并且没有显示太多重定向(这很棒)但是当我输入 https://example.com/asd/asdasdasd/asd 时,我没有重定向到 /something/
    • @ciekals11,如果您是在 apache 上而不是在网站上进行测试,请务必告诉我,因为在线网站不好,它们会给出错误的结果和误报结果。请让我知道。
    • 我有一个网站,它位于使用 apache 网络服务器的主机上。我不知道这是否是您要求的。
    • @ciekals11,是的,我问的是你在哪里测试了规则,因为你已经在 apache 上测试了它们,让我们继续下一个问题。请确认是否要将 URL https://example.com/asd/asdasdasd/asd 重定向到 https://example.com/somethingasd/asdasdasd/asd?如果是,那么我已经更新了我的规则,请看一下这些规则,让我知道它是怎么回事。
    • 这就像一个魅力。非常感谢。
    【解决方案2】:

    您可以使用THE_REQUEST 变量尝试此规则:

    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} !\s/something [NC]
    RewriteRule ^ /something/ [R=302,L]
    

    请务必在完全清除浏览器缓存后进行测试。

    THE_REQUEST 变量表示 Apache 从您的浏览器收到的原始请求,并且在执行其他重写指令后它不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      相关资源
      最近更新 更多