21

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

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

RewriteEngine On

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

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

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

4

1 回答 1

43

如果您使用该R标志,则mod_rewrite表明您需要外部重定向,因此会要求浏览器发出新请求,并且地址栏应相应更改。

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

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

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+)$ ?url=$1 [L]
于 2009-08-20T07:30:51.163 回答