Web サブフォルダをルートにリダイレクトする (/folder を / に)

Web サブフォルダをルートにリダイレクトする (/folder を / に)

.htaccess を使用して /folder を / にリダイレクトしようとしていますが、Apache HTTP Server テスト ページしか表示されません。ルート ディレクトリは次のようになります。

/
.htaccess
-/folder
-/folder2
-/folder3

私の .htaccess は次のようになります:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule (.*) /folder/$1 

何が間違っているのでしょうか? httpd.conf を確認したところ (Centos を実行しています)、mod_rewrite ライブラリがロードされています。補足ですが、私のサーバーは www サーバーではなく、単なる仮想マシンなので、ホスト名は centosvm です。

追加: 私の httpd.conf は次のようになります:

<VirtualHost *:80>
        ServerName taa.local
        DocumentRoot /var/www/html
        SetEnv APPLICATION_ENV "dev"
        Alias /taa /var/www/html/taa/public
        <Directory /var/www/html/taa/public>
                DirectoryIndex index.php
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

答え1

Mod_Rewrite がロードされていることを確認してください。ルート ディレクトリにあることを確認してください(Apache のデフォルトですが、ほとんどのディストリビューションでは httpd.conf ファイルにAllowOverrides Allデフォルトがあります)。none

答え2

<VirtualHost>私の宣言<Directory>にはルートの宣言が欠けていることがわかりました。次<VirtualHostのように変更します。

<VirtualHost *:80>
        ServerName taa.local
        DocumentRoot /var/www/html
        SetEnv APPLICATION_ENV "dev"
        Alias /folder1 /var/www/html/folder1/public
        <Directory /var/www/html>
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
        <Directory /var/www/html/folder1/public>
                DirectoryIndex index.php
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

私の /.htaccess は次のようになります:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder1/
RewriteCond %{REQUEST_URI} !^/folder2/
RewriteCond %{REQUEST_URI} !^/folder3/
RewriteCond %{REQUEST_URI} !^/folder4/
RewriteCond %{REQUEST_URI} !^/folder5/
RewriteRule (.*) folder1/$1 [L]

if と指定してリダイレクトする方法がわかればもっときれいになるのですREQUEST_URI = /が、方法がわかりません。

答え3

RewriteCondとの一致から最初の「/」を削除する必要があります

例を見るhttp://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^folder/ 
RewriteRule (.*) /folder/$1

関連情報