Mod重写 - 重新映射站点根目录

时间:2012-04-03 11:17:31

标签: apache mod-rewrite

我在以下配置(简化版)中遇到了一些mod重写问题:

/index.php
/public/
/public/file.txt

我需要将站点根目录重新映射到/ public,这样我就可以为/ public中的每个现有文件调用/file.txt。同时,应将每个不存在的文件重新映射到index.php,该文件不在/ public文件夹中。

我之前使用以下方法解决了这个问题:

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^(.*)$ public/$1 [L]

RewriteRule ^(.*)$ index.php?$1 [L]

唯一的问题是它只有在站点和.htaccess位于服务器根目录中时才有效。如果网站位于/ codeigniter /目录

,我需要的是使它工作
/codeigniter/index.php
/codeigniter/public/
/codeigniter/public/file.txt

明显失败,因为

/public%{REQUEST_URI}

转换为

/public/codeigniter/public/ which doesn't exist

我已经尝试将rewriteBase设置为/ codeigniter /目录,但我认为它只删除重写规则中的目录而不是RewriteCond,因为它不起作用。

我认为一个想法是将所有内容映射到/ public文件夹,并在/public/.htacces中将不存在的文件重新映射到../index.php(不确定是否可能)

我真的很赞赏你可以给我的任何帮助,因为这是我经常遇到的一个老问题。 理想,路径不应该在.htaccess中进行硬编码,这样我就可以轻松移动或重命名站点文件夹,而无需更改.htaccess

干杯

1 个答案:

答案 0 :(得分:4)

经过几个小时的努力,我最终找到了答案:

在/codeigniter/.htacces中我们需要theese行:

RewriteEngine On

RewriteRule    ^$ public/
RewriteRule    (.*) public/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule    (.*) index.php?$1 [L]

我们需要/ codeigniter / public中的第二个“几乎空”.htaccess,只需一行:

RewriteEngine On

现在,我的站点根目录受到远程访问保护,并且我的公用文件夹名称隐藏在链接之外。此外,无论如何我都可以重命名或移动我的/ codeigniter文件夹,而无需在.htaccess中进行任何修改

大家好日子