我在以下配置(简化版)中遇到了一些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
干杯
答案 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中进行任何修改
大家好日子