将web.config重写规则转换为htaccess重写规则(所有没有扩展名的文件都被处理为.cfm)

时间:2016-11-28 20:19:49

标签: apache .htaccess mod-rewrite coldfusion lucee

我正在将一个站点从IIS 7移动到Apache 2.4并具有以下web.config重写规则我无法转换为.htaccess。该规则基本上允许干净(seo友好)URL通过重写所有文件而没有扩展名为.cfm的扩展名(例如www.mydomain / bag在服务器上重写为www.mydomain.com/bag.cfm。网络中的工作规则.config如下所示

<rule name="Rewrite all non extension requests to .cfm" stopProcessing="true">
      <match url="^(.*)$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
        <add input="{REQUEST_FILENAME}.cfm" matchType="IsFile" ignoreCase="false" />
      </conditions>
      <action type="Rewrite" url="{R:1}.cfm" />
    </rule>

我已经尝试了我在这里找到的所有类似帖子,不幸的是,这些帖子都没有为我工作。如果重要的话,我在CentOS 7(Apache 2.4)上运行Lucee 5.0。任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不太了解Tomcat;我假设您需要Apache,因为Tomcat对于提供非脚本内容没有好处。

您可以对它们进行设置,使它们都具有相同的文档根目录,从而具有一致的URL,但是Tomcat在另一个端口上侦听,而不是在外部打开该端口。然后,您可以代理(隐藏)cfm文件的请求,如下所示:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.cfm -f
RewriteCond %{THE_REQUEST} ^\S++\s++([^?\s]++)(\?\S*)?
RewriteRule ^ http://127.0.0.1:8080%1.cfm%2 [NS,NE,P]
RewriteRule (?<=.cfm)$ http://127.0.0.1:8080/404.cfm [NS,NE,P]

第二个规则是假如直接请求cfm文件不存在的示例。

您需要启用相应的代理模块。