0

Web サイトのルート ディレクトリを変更しました。(すべてのアンカー、ヘッダーなどのように) すべてを新しいルートにリダイレクトする htaccess を作成できますか?

私は次のようなことを試しました:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://localhost/root/index.php [R=301,L]

しかし、localhost/ を開いたときにのみ新しいフォルダーにリダイレクトされます。それ以外の場合は、アンカーをクリックしてもどこにもリダイレクトされません。

これは特に私が達成したいことです:
アンカーは次のとおりです: localhost/user
リダイレクト先: localhost/ root /user

4

2 に答える 2

0

それでも画像などはリダイレクトされませんが、すべてのタグのsrcパスを変更しないとリダイレクトできないと思いますよね?

キャプチャグループを使用してください!

RewriteRule (.*) /root/$1 [R=301,L]

ご覧$1のとおり、パターンにブラケットがキャプチャされたものへの参照があります。したがって、すべてのURIは、ルートフォルダ内の同等のものにリダイレクトされます。これは、サブフォルダー、すべて( "img / something.jpg"-> "root / img / something.jpg")にも当てはまります。

ただし、リダイレクトされたURLが書き換えられるため、このルールだけでは無限ループになります。例:リクエストは/index.htmlに送信され、/ root / index.htmlにリダイレクトされますが、再度キャプチャされ、/ root / root / index.htmlにリダイレクトされます...したがって、この問題に対処するには、RewriteCondを導入する必要があります、 お気に入り

RewriteCond %{REQUEST_URI} !^/root/

これは、「要求されたURIが「/root/」で始まらない場合」を意味します。これらはあなたが始めるはずです。


リダイレクトを行う別の、おそらくより経済的な方法は、RedirectMatchディレクティブを使用することですが、書き換えられたURLが「root」で始まらないという条件を含める必要があるため、正規表現は少し厄介です(リダイレクトを回避するため)ループ)。私は今これをテストすることはできませんが、

RedirectMatch ^/(?!root/)(.*) /root/$2

おそらくトリックを行うでしょう。(この(?!root)ビットはネガティブな先読みであり、もちろんそのようなパターンはrewriteRuleでも使用できます)。

于 2012-08-30T22:02:21.913 に答える
0

プロトコルとドメインを削除する必要があると思います。試す

RewriteRule (.*) /root/index.php [R=301,L]

または多分

RewriteRule (.*) http://root/index.php [R=301,L]

于 2012-08-30T18:30:19.950 に答える