【问题标题】:Apache mod_rewrite - unwanted redirect instead of rewriteApache mod_rewrite - 不需要的重定向而不是重写
【发布时间】:2022-02-04 20:03:13
【问题描述】:

我有一个关于 mod_rewrite 的问题,我似乎无法解决它。我将示例简化为最基本的内容,但我不明白为什么特定规则会强制我的浏览器重定向而不是重写:

RewriteEngine on
#if request is for a physical-file OR for one of the language paths - skip (return as-is)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{REQUEST_URI} ^/de [OR]
RewriteCond %{REQUEST_URI} ^/en-US
RewriteRule ^ - [L]
#otherwise: rewrite to en-US folder
RewriteRule ^(.*)$ /en-US/$1 [NC,L,QSA]

我非常仔细地阅读了文档,看起来这实际上应该重写每个调用,所以https://example.com/fuBar.html 实际上应该从我的服务器中检索文件/en-US/fuBar.html - 用户浏览器不应该知道它。

真正发生的是浏览器由于某种原因被重定向https://example.com/en-US/fuBar.html。虽然这确实显示了正确的内容,但这不是我想要的,也不是我认为RewriteRule 应该做的。我做错了什么?

*add - de 和 en-US 子文件夹的 .htaccess:

RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

【问题讨论】:

  • 您还有哪些其他指令?子目录中的任何其他.htaccess 文件(可能在/en-US/.htaccess)?您说您已经“将示例剥离到最简单的部分”,但是,您发布的指令本身不会触发外部重定向。事实上,如果没有任何其他规则,这将导致无限的重写循环(浏览器中的 500 内部服务器错误响应)。 (?)
  • 想必你正在使用.htaccess
  • 对不起,如果不清楚 - 我是新手,不知道更好。我包含了我的根目录和子文件夹的完整配置 - 都使用 .htaccess
  • 这里仍然没有任何东西会触发“重定向”。确保您已清除浏览器(和任何中介)缓存。检查浏览器开发工具中的网络流量——你到底看到了什么?你看到了什么 3xx HTTP 状态码?但是,在您更新之后,您的示例现在不一致 - 当您描述重写为 /en-US 时,您的指令现在改写为 /de
  • 非常感谢您提供有关检查网络选项卡的提示(应该想到这一点)。实际上根本没有发生重定向!而是因为我以某种方式设置了 我的前端(Angular)似乎比我聪明,在我没有意识到的情况下操纵地址。原来我什至不需要改变基本的href,我只需要重写。非常感谢,你让我开心!如果您将有关检查网络流量的提示变成答案,我将很乐意接受它

标签: apache .htaccess mod-rewrite


【解决方案1】:

您发布的代码中没有任何内容会触发外部“重定向”。

确保您已清除浏览器(和任何中间)缓存,以确保您没有看到更早/错误的 301(永久)重定向。 (301 重定向被浏览器持久缓存。)

在浏览器的开发者工具中检查“网络流量”以查看此重定向的确切性质,了解它从/到重定向的内容,以及重定向的 3xx HTTP 状态代码(如果这确实是一个外部重定向)。

似乎前端(JavaScript/Angular)正在操纵地址栏中的 URL(没有重定向)。来自 cmets:

实际上根本没有发生重定向!而是因为我设置了<base href="/en-US">,不知何故我的前端(Angular)似乎比我聪明,在我没有意识到的情况下操纵地址。原来我什至不需要更改基本 href,我只需要重写。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2021-04-10
    • 1970-01-01
    • 2014-06-02
    • 2018-01-14
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多