【发布时间】:2021-12-22 11:03:39
【问题描述】:
我很确定问题在于 %{REQUEST_FILENAME} 没有引用已更改的 URI,而是引用了已请求的 URI。
我有一些这样的代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule app/?(.*)$ /some-site/map-app/$1 [NC,QSA]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule some-site/map-app/?(.*)$ /some-site/map-app/index.html [NC,L,QSA]
</IfModule>
效果应该是这样的
-
/app在搜索文件时转到 ->/some-site/map-app - 如果失败(因为它通常是 SPA),它会转到
/some-site/map-app/index.html
由于某种原因,它重写了 index.html 回退的每条路径。这意味着 #1 的发生足以满足 RewriteRule 条件,但由于某种原因 RewriteCond 无法正常工作。
如果我删除 #2 的逻辑,文件解析得很好,所以问题不在于它生成的路径不好。
我已阅读有关“RewriteCond Specials”的文档 (https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html)
为什么对于第二个逻辑块中存在且由第一个逻辑块生成的路径,这两个没有失败?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
一些例子和期望的结果:
-
/app/->/some-site/map-app/index.html -
/app/map/id-3->/some-site/map-app/index.html -
/app/app.js->/some-site/map-app/app.js -
/app/assets/img/1.png->/some-site/assets/img/1.png(RewriteEngine 逻辑未包含在帖子中,但包含示例以防它更改潜在答案)
【问题讨论】:
-
你在哪里使用这些指令?
-
在 public_html 文件夹根目录的
.htaccess文件中 -
您是否收到对
/some-site/map-app的直接请求?还是外部请求总是进入/app? -
我花了大约 15 分钟阅读文档并思考这个问题,然后得出结论认为这个需要@MrWhite 现在他在上面,我只是坐在这里像体育赛事一样观看.
-
另外,根据您的第一条规则,您可以重写到目录而不是文件吗? (虽然这看起来不太可能?除了下一个明确检查这个?)
标签: apache mod-rewrite