Apache mod_rewrite - 不需要的重定向而不是重写
Apache mod_rewrite - unwanted redirect instead of rewrite
我有一个关于 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/ [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
您发布的代码中没有任何内容会触发外部“重定向”。
确保您已清除浏览器(和任何中介)缓存,以确保您不会看到 earlier/erroneous 301(永久)重定向。 (301 重定向由浏览器持久缓存。)
检查浏览器的开发人员工具中的“网络流量”,了解此 重定向的确切性质, 查看它重定向的内容 from/to,以及 3xx重定向的 HTTP 状态代码(如果确实是外部重定向)。
front-end (JavaScript/Angular) 似乎在操纵地址栏中的URL(没有重定向)。来自评论:
Actually there was no redirect happening at all! Rather since I set <base href="/en-US">
somehow my frontend (Angular) seems to have outsmarted me, manipulating the address without me realizing it. Turns out I don't even need to change the base href, I just need the rewrites.
我有一个关于 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/ [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
您发布的代码中没有任何内容会触发外部“重定向”。
确保您已清除浏览器(和任何中介)缓存,以确保您不会看到 earlier/erroneous 301(永久)重定向。 (301 重定向由浏览器持久缓存。)
检查浏览器的开发人员工具中的“网络流量”,了解此 重定向的确切性质, 查看它重定向的内容 from/to,以及 3xx重定向的 HTTP 状态代码(如果确实是外部重定向)。
front-end (JavaScript/Angular) 似乎在操纵地址栏中的URL(没有重定向)。来自评论:
Actually there was no redirect happening at all! Rather since I set
<base href="/en-US">
somehow my frontend (Angular) seems to have outsmarted me, manipulating the address without me realizing it. Turns out I don't even need to change the base href, I just need the rewrites.