如何在lucee中实现urlrewrite

How to implement urlrewrite in lucee

我想在我的 lucee 应用程序中重写 url。我使用 url "http://localhost:8888/sampleApp/views/test.cfm" to display the view pages and I want it to display as "http://localhost:8888/sampleApp/test.cfm".

这不会在 Lucee 中实现,它会在网络服务器中完成,例如Apache、IIS、Nginx 等... Lucee 是一个 servlet 运行 在像 Tomcat 这样的应用服务器上,而不是 Web 服务器,不要将两者混为一谈。

如前所述,这取决于网络服务器,尤其是在生产环境中。但是,在某些情况下以及为了开发,您可能希望在没有前端网络服务器的情况下在您的 servlet 容器引擎中使用 urlrewrite。从您的 post 读取,您正在使用端口 8888,这让我假设您正在使用 Lucees 默认 servlet 容器 Tomcat。

从 Tomcat 8.0 开始可以使用 urlrewrite。但正如已经说过的,这仅建议用于开发或 Tomcat 作为独立的生产环境。如果您在 Tomcat 前面有另一个网络服务器,您可以让此设置保持不变,并且前面的网络服务器将进行 url 重写。对于单独使用 Tomcat 的工作解决方案,添加 RewriteValve 和一个包含 url 重写规则的 rewrite.config 文件,如下所示:

  1. 编辑 {path_to_lucee}/conf/server.xml 并将 RewriteValve 指令添加到 <主机名="localhost">。就是这样:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
 ...
 <Valve className="org.apache.catalina.valves.rewrite.RewriteValve"/>
 ...
</Host>
  1. 然后创建一个 rewrite.config 在 {path_to_lucee}/conf/Catalina/localhost/rewrite.config 您需要创建文件夹 Catalinalocalhost 以防它们不存在。然后将以下简单 url 重写规则添加到 rewrite.config 文件:
RewriteCond %{SERVLET_PATH} !-f
RewriteRule ^\/sampleApp\/(.*)\.cfm(.*)$ sampleApp/views/.cfm [L,QSA]
  1. 重启Tomcat使新设置生效

您很可能需要调整此规则。更多更深入的信息,请查看: Apache Tomcat 9 Rewrite Valve

您是否在 Windows 上使用 IIS?如果是这样,您只需要 URL Rewrite Module 2.0

安装它,使用重写规则设置 web.config,就可以开始了。

您也可能不希望在您的网址中使用 .cfm 扩展名。我为此使用此规则:

<rule name="Rewrite .cfm" enabled="true" stopProcessing="false">
          <match url="[^?]*" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).png" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).cfm" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).cfc" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).jpg" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).gif" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).mp4" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).mp3" negate="true" />
            <add input="{REQUEST_FILENAME}" pattern="^(.*).css" negate="true" />
          </conditions>
          <action type="Rewrite" url="{R:0}.cfm" />
        </rule>

您应该为您的网站支持的所有文件类型添加更多条件,例如 .mkv.js