如果检测到 Opera UA,我想重定向用户。
以下设置部分工作正常:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Opera [NC]
RewriteRule ^$ https://example.com/sub1/ [L,R=301]
当访问 URL https://example.com/ 时,用户被正确重定向到 https://example.com/sub1/,但是当访问任何其他 URL 时,例如 https://example。 com/example-1、https://example.com/example-2 等,用户未按预期重定向。
我还尝试了以下两个修改后的字符串:
RewriteRule ^(.*)$ https://example.com/sub1/ [L,R=301]
和
RewriteRule ^(.*) https://example.com/sub1/ [L,R=301]
使用两个修改后的字符串,用户将从任何 URL 正确重定向到 https://example.com/sub1/。但是,html 页面未呈现,并显示以下错误消息:“页面未正确重定向”
有人知道我可以使用的有效正则表达式吗?
您上次重写规则的问题是浏览器陷入了无限重定向循环。当您访问指向另一个 URL 的 URL,而该 URL 又指向第一个 URL 时,就会发生无限重定向循环。为防止这种情况,您必须排除要重定向到的文件夹。这里有一些可能性。还要记住在测试后将
R=302
更改为R=301
。
RewriteCond %{REQUEST_URI} !^/sub/
RewriteRule (.*) /sub/ [R=302,L]
这也可以完成这项工作:
RewriteRule !sub /sub/ [R=302,L]
我刚才发现的另一个解决方案来自先生。白色,其中使用了
REDIRECT_STATUS
环境变量。 先生见这里和这里。 White 原始答案和有关此方法的更多详细信息。
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /sub/$1 [R=302,L]