.htaccess在不更改地址栏的情况下重定向

.htaccess在不更改地址栏的情况下重定向,.htaccess,redirect,http-status-code-301,.htaccess,Redirect,Http Status Code 301,我正在尝试编写一个.htaccess规则来重定向到脚本,该脚本将进一步重定向到其他地方。有点像URL缩短器的工作原理。但是,我不希望在重定向的.htaccess部分期间更改地址栏。(脚本重定向可以更改位置。) 我正在使用mod_rewrite,目前正在执行以下操作: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteBase / RewriteRule (.+)$ "?url=$1" [L,R=301] 是否有一个标志或其

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

我正在使用
mod_rewrite
,目前正在执行以下操作:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /
RewriteRule (.+)$ "?url=$1" [L,R=301]
是否有一个标志或其他方法,我可以用来实现我想做的事


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

如果您使用
R
标志,您告诉
mod_rewrite
您需要外部重定向,因此浏览器会被要求发出新请求,地址栏也会相应地更改

如果没有
R
标志,就没有重定向,只有一个Apache内部请求重写,它对浏览器是隐藏的。因此,地址栏不会改变。但是,由于明显的原因,您不能使用指向外部URI的内部重定向

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

RewriteEngine On
RewriteBase /

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

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