我正在尝试使用 .htaccess 将 /folder 重定向到 /,但我得到的只是 Apache HTTP 服务器测试页面。我的根目录如下所示:
/
.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。确保AllowOverrides All
根目录中有 (这是 Apache 的默认设置,但大多数发行版none
在 httpd.conf 文件中都有默认设置)。
答案2
我发现我的<VirtualHost>
声明缺少<Directory>
root 的声明。通过将我的声明更改<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]
如果我知道该怎么说,那么就会更清楚,如果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