Apache htaccess RewriteRule不能正常工作

时间:2013-01-16 14:48:40

标签: regex apache .htaccess mod-rewrite

出于某种原因,我真的无法让我的.htaccess RewriteRule工作。我尝试了很多东西,然后做了谷歌搜索,但都失败了。一个可能的原因可能是我有一个非常古老的Apache版本(但这是我无法控制的)。不知道如何检索版本,但phpinfo()向我展示了“Apache API Version 20051115”。它必须至少在台式机,Blackberry和iPad上使用。

我想重写一遍:http://subdomain.domain.com/folder1/?id=1234 以下内容:http://othersubdomain.domain.com/?id=1234 其中id可以是任何数字(我可以重写任何参数,我也可以重定向到/ 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
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 个答案:

答案 0 :(得分:1)

我认为这应该有效(没有任何RewriteCond):

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

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

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