Pretty URL 使用 PrettyFaces 隐藏资源
Pretty URL hides resource using PrettyFaces
我在 PrettyFaces 3.3.3 和 Wildfly 10.1 上有一个网络应用 运行。0.Final。为了使 URL 更加用户友好,我使用了 PrettyFaces。有效 URL 的示例类似于:
http://www.example.com/en/drinks
在这种情况下,一个 bean 中将有两个变量:
private String language;
private String zone;
具有以下值:
language = "en"
zone = "drinks"
问题是我还有一个 CSS 文件,路径为:
http://www.example.com/styles/style.css
PrettyFaces 错误地解释了这一点,阻止我访问真实资源:
language = "styles"
zone = "style.css"
我试图找到一种方法告诉 PrettyFaces 不要翻译 CSS 文件的 URL,但我找不到类似的东西。
有没有办法通过保持漂亮的 URL 来访问 CSS 文件?
我当前的 PrettyFaces 配置是:
<url-mapping id="zoneSelected">
<pattern value="/#{navigationController.language}/#{navigationController.zone}" />
<view-id>/faces/index.xhtml</view-id>
</url-mapping>
PrettyFaces 将根据正则表达式匹配任何传入请求。
这样的模式:
<pattern value="/#{bean.language}/#{bean.zone}" />
会被转换成这样的正则表达式:
/[^/]+/[^/]+
这是因为默认情况下 PrettyFaces 使用 [^/]+
作为所有路径参数。
这种通用模式当然也会匹配其他资源,例如 CSS 或图像文件。
解决此问题的一种方法是自定义 PrettyFaces 将用于路径参数的正则表达式模式。这很容易做到并在此处进行了描述:
http://www.ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.pathparams.regex
所以基本上只用这个模式来代替:
<pattern value="/#{ /[a-z]{2}/ bean.language }/#{bean.zone}" />
这将转换为:
/[a-z]{2}/[^/]+
在这种情况下,您的样式 sheet 将不再匹配该模式。
我在 PrettyFaces 3.3.3 和 Wildfly 10.1 上有一个网络应用 运行。0.Final。为了使 URL 更加用户友好,我使用了 PrettyFaces。有效 URL 的示例类似于:
http://www.example.com/en/drinks
在这种情况下,一个 bean 中将有两个变量:
private String language;
private String zone;
具有以下值:
language = "en"
zone = "drinks"
问题是我还有一个 CSS 文件,路径为:
http://www.example.com/styles/style.css
PrettyFaces 错误地解释了这一点,阻止我访问真实资源:
language = "styles"
zone = "style.css"
我试图找到一种方法告诉 PrettyFaces 不要翻译 CSS 文件的 URL,但我找不到类似的东西。
有没有办法通过保持漂亮的 URL 来访问 CSS 文件?
我当前的 PrettyFaces 配置是:
<url-mapping id="zoneSelected">
<pattern value="/#{navigationController.language}/#{navigationController.zone}" />
<view-id>/faces/index.xhtml</view-id>
</url-mapping>
PrettyFaces 将根据正则表达式匹配任何传入请求。
这样的模式:
<pattern value="/#{bean.language}/#{bean.zone}" />
会被转换成这样的正则表达式:
/[^/]+/[^/]+
这是因为默认情况下 PrettyFaces 使用 [^/]+
作为所有路径参数。
这种通用模式当然也会匹配其他资源,例如 CSS 或图像文件。
解决此问题的一种方法是自定义 PrettyFaces 将用于路径参数的正则表达式模式。这很容易做到并在此处进行了描述:
http://www.ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.pathparams.regex
所以基本上只用这个模式来代替:
<pattern value="/#{ /[a-z]{2}/ bean.language }/#{bean.zone}" />
这将转换为:
/[a-z]{2}/[^/]+
在这种情况下,您的样式 sheet 将不再匹配该模式。