RewriteRule显示根

时间:2016-03-05 15:26:59

标签: .htaccess mod-rewrite

我最近为我的域开发了一个新网站,今天我想推动它#34; live"通过将其提供给访问我的域example.com的根目录的任何人。

但是,我不想在目录之间来回移动文件,以便存档"旧网站并提供新网站。

相反,我在.htaccess中添加了以下RewriteRule:

RewriteRule ^((?!(newsite)|(oldsite)).+)$ /newsite/$1 [NC,L]

我的旧网站位于根目录中,而新网站位于/newsite下。

现在,当我访问我的网站example.com时,它会正确显示目录/newsite下的网站内容,但不会在网址中显示该内容。到目前为止一切都很好。

然而,现在我想要一个特殊的"假的"目录在URL中提供。所以我希望example.com/oldsite从根目录加载内容。

这是我的文件夹树的插图,以及我想要的内容:

root                 <--- accessible from 'example.com/oldsite'
├──index.php        
├──css               <--- accessible from 'example.com/oldsite/css'
├──js
└──newsite           <--- accessible from 'example.com'
   ├──index.php
   ├──css            <--- accessible from 'example.com/css'
   └──js             

我尝试将.htaccess更改为:

RewriteRule ^((?=oldsite).+)$ $1 [NC,L]
RewriteRule ^((?!(newsite)|(oldsite)).+)$ /newsite/$1 [NC,L]

但这不起作用。我试过的其他东西在重定向循环中渲染了网站。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

您可以在站点根目录中使用这两个重写规则.htaccess:

RewriteEngine On

# load newsite if not newsite and not oldsite
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^((?!(?:newsite|oldsite)).*)$ newsite/$1 [NC,L]

# load root if request is newsite
RewriteRule ^oldsite(/.*)?$ /$1 [L,NC]