如何使用.htaccess将所有请求映射到子目录

时间:2015-03-05 11:00:39

标签: apache .htaccess

我有这个结构:

root
-web
-- .htaccess
-- index.html
-- robots.txt
-.htaccess

我的文档根目录是 root 目录。 /root/.htaccess的内容是:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine on

    RewriteRule    ^$ web/    [L]
    RewriteRule    (.*) web/$1 [L]
</IfModule>

现在,两个请求/robots.txt和/web/robots.txt都指向一个文件,即/ web /下有一个完整网站的副本。

如何在.htaccess文件中制作这样的规则,以便/web/robots.txt指向/web/web/robots.txt(并显示404)?我只需要让/robots.txt工作。

解决方案必须仅使用.htaccess。

(问题不在于robots.txt文件,它只是一个例子)

谢谢!

1 个答案:

答案 0 :(得分:1)

像这样更改你的根.htaccess:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine on

    # otherwise route /foobar to /web/foobar
    RewriteRule ^((?!web/).*)$ web/$1 [L,NC]
</IfModule>

如果请求已经存在,则会避免添加web/

内部/web/.htaccess将此规则作为第一条规则

RewriteEngine On

# show 404 for direct requests to /web    
RewriteCond %{THE_REQUEST} /web [NC]
RewriteRule ^ - [L,R=404]