1

何らかの理由で、.htaccessRewriteRuleを実際に機能させることができません。私は多くのことを試し、グーグルをしましたが、失敗しました。考えられる原因の1つは、かなり古いバージョンのApacheを使用していることです(ただし、これは私の制御不能です)。バージョンを取得する方法がわかりませんが、phpinfo()に「ApacheAPIバージョン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>

このリダイレクトは機能しているように見えますが、正しい認証ユーザー/パスワードを指定した後でないと、まさにそれを防ぎたいと思います。

ヒントは大歓迎です...

4

1 に答える 1

1

これはうまくいくはずです(RewriteCondなし):

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

QSA フラグは、クエリ パラメータを保持するように指示します。$1 は ( ) に一致する内容に置き換えられます。

PS 私の知る限り、RewriteCond でのみ %{...} 変数を使用できます。

于 2013-01-16T15:05:01.447 に答える