查找不包含特定字符串的 uri 时重定向循环

Redirect loop while looking for uri that does NOT contain specific string

我有一个网站可以说 https://example.com/ and I would like to redirect every url that doesn't begins with /something to https://example.com/something/

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

RewriteEngine On

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

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

Here 是一个 link 到 htaccess 测试器,它表明这应该有效,并且当我已经在这里时不应该将我重定向到 /something/ 但事实并非如此我的主机。

我正在关注 this and 问题,但没有成功。

根据您显示的尝试,请尝试遵循一组规则。如果您已有规则,请将它们放在 htaccess 规则文件的顶部。

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

RewriteEngine On

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

您可以使用 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