我已经在这个问题上挣扎了好几个小时了。 基本上我在
中有我的网站的新版本var/www/mynewsite/public
我的www /文件夹中有一个像这样的
的符号链接www/v2_legacy -> /d1/v2_legacy/
现在,我需要访问 www.mysite.com 的任何人重定向到 www.mysite.com/mynewsite/public/
但我还需要保留一些旧链接,因此,访问 www.mysite.com/clients/whatever 应将用户重定向到 www.mysite.com/v2_legacy/clients /不管即可。除了“客户”文件夹,我还有另外两个。
这是我的.htaccess,位于www /文件夹中:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^clients/(.*)$ v2_legacy/clients/$1 [L]
RewriteCond %{REQUEST_URI} !^v2_legacy/(.*)$
RewriteRule ^(.*)$ mynewsite/public/$1 [L]
我已经尝试过这个文件的这么多变种,但仍然无法获得合适的行为。
使用上述htaccess文件,访问www.mysite.com将正确重定向,但访问www.mysite.com/clients/somestuff不会。但是,如果我注释掉最后一个RewriteCond和RewriteRule,访问www.mysite.com/clients/somestuff将正常工作,但显然,访问www.mysite.com将无法正常工作。
答案 0 :(得分:2)
%{REQUEST_URI}
变量始终以斜杠开头。因此,与^something
匹配将始终是错误的(并且否定使其始终为真)。除此之外,您需要防止无限循环发生,因为^(.*)$
也匹配mynewsite/public/...
。
你最终会得到以下内容:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^clients/(.*)$ v2_legacy/clients/$1 [L]
RewriteCond %{REQUEST_URI} !^/(v2_legacy|mynewsite)
RewriteRule ^(.*)$ mynewsite/public/$1 [L]