【发布时间】:2022-01-09 08:11:20
【问题描述】:
这不完全是个问题,但我真的很好奇。我正在使用 [L] 标志在我的 .htaccess 文件中进行简单的重写。它工作正常,正如在 GUI 浏览器中所预期的那样,但是当我在 w3m 中加载页面时,我看到了一个怪癖。它仍然按预期重定向,但是当我按 Shift-U 查看 URL 时,它会显示它已重定向到的文件夹。我认为除非我使用 [R] 标志,否则浏览器甚至不会知道 Apache 正在从不同的目录中提取页面。我错了,还是我的 .htaccess 配置不正确?这是.htaccess:
RewriteEngine On
Options -Indexes
RewriteRule ^unicorn/?$ sampler/cs5.html [L]
RewriteCond %{REQUEST_URI} !^/addip/?$
RewriteCond %{REQUEST_URI} !^/sampler/
RewriteCond %{REQUEST_URI} !^/cs.*
RewriteRule ^([a-zA-Z0-9]+)$ /makestory/makestory.php?story=$1 [END]
这是我在 w3m 中输入的 URL:https://example.com/unicorn。典型的浏览器会继续在其地址栏中显示此内容。
这是当我按下 Shift-U 时 w3m 显示的内容:https://example.com/sampler/
想法?
【问题讨论】:
-
这确实令人惊讶。 external 客户端甚至无法看到内部重写。您可以更深入地挖掘,例如使用网络嗅探器来实际查看重写过程的详细信息。基于这样一个浏览器的浏览器功能肯定与普通浏览器有很大不同这一事实,我可以想象一些效果。这会导致服务器端出现一些稍微不同的行为,可能会连接到内容协商,然后确实会触发此特定请求的外部重定向。不过,这只是一个疯狂的猜测。
-
"
https://example.com/sampler/" - 虽然这不是您要重写的 文件 (sampler/cs5.html)。您是否在页面的 HTML 中的任何位置引用/sampler/子目录?rel="canonical"或许? -
你成功了,怀特先生! html 文档包含
。我把它拿出来了,w3m 现在按预期显示example.com/cookie。然后我修复了对 css 文件的引用,因此无论如何都不需要 base href。感谢您的洞察力。 -
很高兴您解决了它。您应该将其添加为答案(然后是“接受”),因为这可以帮助其他读者。 :)
标签: apache .htaccess url-rewriting w3m