我遇到了Apache 2.2的以下问题:
我需要将所有/
个请求重定向到/new/
(现有文件夹),除非URI为/old/
,这是一个包含/
目录本身的虚拟文件夹。例如:
/
目录:
<new>
a.php
因此,当我请求/a.php
时,它会重定向到/new/a.php
,但如果我请求/old/a.php
,则会返回/a.php
文件。
到目前为止,我得到了这个,它将/a.php
重定向到/new/a.php
,但/old/a.php
总是失败:
RewriteEngine On
RewriteBase /
RewriteRule ^old/(.*) /$1 [L]
RewriteRule ^(.*) new/$1 [L,R=302]
任何想法我错了吗?
我必须指出,我无法访问httpd.conf,只能访问文件夹,所以我必须使用.htaccess文件。
答案 0 :(得分:0)
使用RewriteCond
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^old/
RewriteRule ^(.*) new/$1 [L,R=302]
RewriteRule ^old/(.*) /$1 [L]
答案 1 :(得分:0)
我终于找到了解决方案:
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
的请求将重定向到{{ 1}}和/new/b.php
的请求将返回/old/a.php