0

次の.htaccess構成があります。

RewriteEngine on
allow from all

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f

# otherwise forward it to index.php
RewriteRule . index.php

RewriteCond %{HTTP_HOST} ^domain1\.domain2\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain1\.domain2\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.domain1\.com\/$1" [R=301,L]

RewriteCond %{HTTP_HOST} ^domain1.com$
RewriteRule ^/?$ "http\:\/\/www\.domain1\.com\/" [R=301,L]

とりわけ、www 以外のすべての URL を www のある URL にリダイレクトしたいと考えています。

URL が次のようなページを除いて、すべて正常に動作します。

index?Form%5bplace%5d=Caribbean&Form%5bdestination%5d=Virgin+Islands&Form%5btype%5d=A

www なしで URL を入力すると、リダイレクトは次の URL になります。

index?Form%255bplace%255d=Caribbean&Form%255bdestination%255d=Virgin+Islands&Form%255btype%255d=A

認識されていないため、404エラーが発生します。

これを回避する方法はありますか?

4

2 に答える 2

0

コードを次のように置き換えます。

allow from all
Options +FollowSymLinks -MultiViews

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# if a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
# otherwise forward it to index.php
RewriteRule . index.php [L]

RewriteCond %{HTTP_HOST} ^domain1\.domain2\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain1\.domain2\.com$
RewriteRule ^ http://www.domain1.com%{REQUEST_URI} [NE,R=301,L]

RewriteCond %{HTTP_HOST} ^domain1\.com$
RewriteRule ^/?$ http://www.domain1.com/ [R=301,L]
于 2013-09-25T22:22:38.897 に答える
0

何が起こっているかというと、%シンボルが にエスケープされてい%25ます。

NEルールのフラグを使用してこれを回避できます

于 2013-09-25T22:27:27.970 に答える