.htaccess 重定向而不更改地址栏

Posted

技术标签:

【中文标题】.htaccess 重定向而不更改地址栏【英文标题】:.htaccess redirect without changing address bar 【发布时间】:2010-11-21 05:28:37 【问题描述】:

我正在尝试编写 .htaccess 规则来重定向到脚本,该脚本会进一步重定向到其他地方。有点像 URL 缩短器的工作方式。但是,我希望在重定向的 .htaccess 部分期间更改地址栏。 (脚本重定向可以改变位置。)

我正在使用mod_rewrite,目前正在这样做:

RewriteEngine On

RewriteCond %REQUEST_FILENAME !-f
RewriteBase /
RewriteRule (.+)$ "?url=$1" [L,R=301]

我可以使用标志或其他方法来实现我想要做的事情吗?

附录:地址栏在 Firefox 中不会随着重定向的发生而改变,这是我想要做的。它只改变一次以反映终点。 Safari 每一步都会改变它。有什么办法可以避免吗?

【问题讨论】:

【参考方案1】:

如果您使用 R 标志,您是在告诉 mod_rewrite 您想要外部重定向,因此要求浏览器发出新请求并且地址栏应相应更改。

如果没有R 标志,就没有重定向,而是对浏览器隐藏的 Apache 内部请求重写。因此,地址栏不会改变。但是,出于显而易见的原因,您不能使用内部重定向到外部 URI。

由于您似乎使用内部重定向,只需删除 R 标志,它应该可以工作:

RewriteEngine On
RewriteBase /

RewriteCond %REQUEST_FILENAME !-f
RewriteRule (.+)$ ?url=$1 [L]

【讨论】:

对于外部 URI,您可以使用标志 [P] 代理它

以上是关于.htaccess 重定向而不更改地址栏的主要内容,如果未能解决你的问题,请参考以下文章

将通配符子域重定向到子目录,而不更改地址栏中的 URL

重定向网站,但在地址栏中保留原始网址

.htaccess:重定向而不更改 url

将域重定向到另一个域并更改 url [关闭]

java重定向时如何保持地址栏不变

jquery:更改URL地址而不重定向? [复制]