mod_rewrite将一个文件后缀类型别名为另一个文件后缀

时间:2020-03-05 18:39:11  来源:igfitidea点击:

我希望我能解释得足够清楚,但如果没有让我知道,我会尽力澄清。

我目前正在使用ColdFusion开发站点,并具有一条mod_rewrite规则,以使其看起来像该站点正在使用PHP。对index.php的任何请求均由index.cfm处理(该规则将* .php映射为* .cfm)。

到目前为止效果很好,很好。问题是,如果直接请求index.cfm(或者任何ColdFusion页面),我想返回404状态代码。

如果我尝试使用mod_rewrite阻止对* .cfm文件的访问,它还会返回一个404请求* .php。

我认为我可能不得不更改我的Apache配置,而不是使用.htaccess

解决方案

回答

发布我们已经具有的规则作为起点,这样人们就不必重新创建它来为我们提供帮助。

我建议首先尝试将[.php]映射到.cfm文件的规则[L]。

回答

我们必须使用两组不同的重写规则,一组用于.php,另一组用于.chm,并使它们与RewriteCond%{REQUEST_FILENAME}互斥。并使用jj33建议的标志[L]。

我们可以将规则保留在.htaccess中。

回答

我们可以使用S标志来跳过404规则,如下所示:

RewriteEngine on

# Do not separate these two rules so long as the first has S=1
RewriteRule (.*)\.php$ .cfm [S=1]
RewriteRule \.cfm$ - [R=404]

如果我们还使用Alias选项,则还应添加PT标志。有关详细信息,请参见mod_rewrite文档。