2010-09-05 80 views
1

我有这样的规则:mod_speling内部重定向,或如何处理与瓶盖的mod_rewrite

RewriteRule ^(panel|admin|site)/([A-Za-z0-9]+?)/(scripts|assets)/(.*)$ Project/$2/Public/$3/$1/$4 [L] 

的想法是允许访问的公共资产,因为它们存在的代码中的模块。唯一的问题是命名方案需要标题案例(让我们假设这是不可改变的)。因此,一个请求:

/site/users/scripts/myscript.js 

返回404,但:

/site/Users/scripts/myscript.js 

作品。

我试图使用mod_speling对付外壳的问题,但是mod_speling做一个完整的重定向,而不是一个内部的,因此URL给最终用户的变化:

/Project/Users/Public/scripts/myscript.js 

这是没有好。这意味着我的目录结构有点暴露,这意味着我需要一个额外的重写规则来传递它。

有没有办法更好地处理mod_rewrite中的大写字母,即不使用RewriteMap? (需要保持在.htaccess中的一切)

另外,有没有办法改变mod_speling使用内部重定向?

回答

0

处理mod_rewrite中的大写更优雅,即不使用RewriteMap?

在我看来,你可以使用内部映射函数tolower,并且不需要任何外部文件。或者我错过了什么?

编辑:哈克答案是每个AZ的26个重写规则为第一个字母和替代使用小写字母......或者每字的规则(如用户),可以出现在URL

+0

由于某些未知原因,在使用它们之前(例如'RewriteMap tolower int:tolower'),您必须手动定义内部'RewriteMap'函数,这涉及编辑服务器/虚拟主机配置。这是不幸的,因为这绝对是这里工作的最佳工具。 – 2010-09-06 17:28:01

+0

是的,这是我一直在跑的墙。 :(我们部署在各种各样的服务器上,我通常没有那么多的访问权限,所以我不能假设我有它。 – jhogendorn 2010-09-07 00:50:39

+0

我打算把这个标记为正确答案,它并不是真的“正确”在回答这个问题的标准时,但由于这是不可能的,所以这个答案就近了:) – jhogendorn 2011-03-10 23:09:07