2009-08-20 82 views
19

我试图编写.htaccess规则重定向到脚本,该脚本进一步重定向到其他地方。有点像URL shorteners的工作方式。不过,我不要希望地址栏在.htaccess部分重定向期间改变。 (为脚本重定向到改变位置没关系。).htaccess重定向无需更改地址栏

我使用mod_rewrite,目前这样做:

RewriteEngine On 

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

有没有标志或我可以用另一种方法来实现我是什么试图做什么?

Addenda:由于重定向正在发生,位置栏不会在Firefox中更改,这正是我想要做的。它只是改变一次以反映终点。 Safari在每个步骤更改它。任何方式来避免这种情况?

回答

39

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

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

因为你似乎仍要使用内部重定向,只是删除R标志,它应该工作:

RewriteEngine On 
RewriteBase/

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

啊!这解决了它。我的错。谢谢! – aditya 2009-08-20 07:49:41

+2

对于外部URI,您可以使用标志[P] – 2013-07-02 10:34:08