我试图redirect/文件夹/使用.htaccess但我所得到的是Apache HTTP服务器testing页。 我的根目录如下所示:
/ .htaccess -/folder -/folder2 -/folder3
我的.htaccess看起来像这样:
RewriteEngine On RewriteCond %{REQUEST_URI} !^/folder/ RewriteRule (.*) /folder/$1
我究竟做错了什么? 我检查了我的httpd.conf(我正在运行Centos)和mod_rewrite库正在加载。 作为一个方面说明,我的服务器不是一个万维网服务器,它只是一个虚拟机,所以它的主机名是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>
确保加载了Mod_Rewrite。 确保你的根目录下有AllowOverrides All (这是Apache默认的,但是大多数发行版在httpd.conf文件中都有一个默认的none )。
我发现我的<VirtualHost>声明缺less一个根<Directory>的<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]
如果我知道如果REQUEST_URI = /很热,然后redirect,但我不知道如何,这将是更清洁。
您需要从与RewriteCond的匹配中删除最初的“/”
请参阅http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond中的示例
RewriteEngine On RewriteCond %{REQUEST_URI} !^folder/ RewriteRule (.*) /folder/$1