2013-01-16 147 views
1

由于某种原因,我真的无法让我的.htaccess RewriteRule工作。我尝试了很多东西,并做了我的谷歌搜索,但失败了。一个可能的原因可能是我有一个非常古老的Apache版本(但这是我无法控制的)。不知道如何检索版本,但phpinfo()显示我“Apache API版本20051115”。至少它必须在台式机,黑莓和iPad上运行。Apache htaccess重写规则不起作用

我想改写这个:http://subdomain.domain.com/folder1/?id=1234 以下几点:http://othersubdomain.domain.com/?id=1234 其中id可以是任意数字(我很好重写任何参数,我还罚款与重定向到/文件夹1/ID = 1234,?重要的部分是子域和参数仍然存在的事实)。重要的是,我没有得到身份验证弹出窗口(在任何设备上)。

我试过如下:

AuthUserFile /home/user/path/to/.htpasswd 
AuthGroupFile /dev/null 
AuthName "This site requires a valid username and password" 
AuthType Basic 

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^folder1.*$ http://othersubdomain.domain.com%{REQUEST_URI}? [redirect=301,last] 

<limit GET POST> 
require valid-user 
</limit> 

,似乎现在得到了正确的重定向我的机器上的唯一事情是subdomain.domain.com/folder1/(没有最后/它不工作,或者如果我添加参数到最后,即.../folder1 /?id = 1234它也不起作用)。

我还尝试了以下内容:

AuthUserFile /home/user/path/to/.htpasswd 
AuthGroupFile /dev/null 
AuthName "This site requires a valid username and password" 
AuthType Basic 

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_URI} ^/folder1 
RewriteRule .* http://othersubdomain.domain.com/?%{QUERY_STRING} [redirect=301,last] 

<limit GET POST> 
require valid-user 
</limit> 

此重定向似乎工作,但只有在我给出正确的验证用户名/密码,而这正是我想避免的。

技巧非常欢迎更多...

回答

1

我认为这应该工作(没有任何的RewriteCond):

RewriteRule ^folder1(.*)$ http://othersubdomain.domain.com$1 [L,QSA,R=301] 

QSA标志告诉保留查询参数。 $(1)被替换为()所匹配的内容。

P.S.据我所知,只能在RewriteCond中使用%{...}变量。

+0

感谢您的回复。如果我提供了正确的身份验证,这确实有效,但我希望它在没有获得身份验证弹出对话框的情况下运行。 – jeebee

+0

尝试将Auth *指令包装为。这可以帮助您关闭特定网址的身份验证。 –

+0

再次感谢,但我没有做到这一点。尽管听起来它应该能够解决这个问题。 但是,我发现了别的东西,我非常满意。我完全删除了顶层.htaccess。我的顶层是一个有自己的身份验证(我只是启用了一些身份验证插件)的Wordpress网站。我将.htaccess文件移到了我想要的子文件夹中。 – jeebee