【发布时间】:2012-04-03 11:17:30
【问题描述】:
我在以下配置(简化版)中的 mod rewrite 遇到了一些问题:
/index.php
/public/
/public/file.txt
我需要将站点根目录重新映射到 /public,这样我就可以为 /public 中的每个现有文件调用 /file.txt。同时,每个不存在的文件都应该重新映射到不在 /public 文件夹中的 index.php。
我之前已经通过以下方法解决了这个问题:
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/ 目录,但我认为它只会删除 rewrite Rule 中的 dir 而不是 RewriteCond 中的目录,因为它不起作用。
我认为一个想法是将所有内容映射到 /public 文件夹并在 /public/.htacces 中将不存在的文件重新映射到 ../index.php(不确定是否可能)
我真的很感激您在这方面能给我的任何帮助,因为这是我经常面临的一个老问题。 理想情况下,路径不应在 .htaccess 中硬编码,因此我可以轻松移动或重命名站点文件夹,而无需更改 .htaccess
干杯
【问题讨论】:
标签: apache mod-rewrite