Mod rewrite 将所有请求重定向到子文件夹,但有例外
我在Apache 2.2中遇到以下问题: 我需要将所有Mod rewrite 将所有请求重定向到子文件夹,但有例外,mod-rewrite,apache2,Mod Rewrite,Apache2,我在Apache 2.2中遇到以下问题: 我需要将所有/请求重定向到/new/(现有文件夹),除非URI是/old/,一个包含/目录本身的虚拟文件夹。例如: /目录: <new> a.php 知道我做错了什么吗 我必须指出,我没有访问httpd.conf的权限,只能访问文件夹,所以我必须使用.htaccess文件 使用重写条件 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^old/ RewriteRule
/
请求重定向到/new/
(现有文件夹),除非URI是/old/
,一个包含/
目录本身的虚拟文件夹。例如:
/
目录:
<new>
a.php
知道我做错了什么吗
我必须指出,我没有访问httpd.conf的权限,只能访问文件夹,所以我必须使用.htaccess文件 使用重写条件
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^old/
RewriteRule ^(.*) new/$1 [L,R=302]
RewriteRule ^old/(.*) /$1 [L]
我终于找到了解决办法:
RewriteCond %{REQUEST_URI} old/?(.*)
RewriteRule ^ /%1 [L,QSA]
# redirect requests from / to /new/
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^ new/ [L,R=302,QSA]
# redirect requests from /..... to /new/.....
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !old/?
RewriteCond %{REQUEST_URI} !new/?
RewriteRule ^(.*) new/$1 [L,R=302,QSA]
不幸的是,这不是最好的解决方案,因为对
/a.php
的请求将返回/a.php
,而不是/new/a.php
,但是对/b.php
的请求将重定向到/new/b.php
,而对/old/a.php
的请求将返回/a.php
,即使使用此选项,我被重定向到/new/old/
,这不会改变我的行为。
RewriteCond %{REQUEST_URI} old/?(.*)
RewriteRule ^ /%1 [L,QSA]
# redirect requests from / to /new/
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^ new/ [L,R=302,QSA]
# redirect requests from /..... to /new/.....
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !old/?
RewriteCond %{REQUEST_URI} !new/?
RewriteRule ^(.*) new/$1 [L,R=302,QSA]