我已经设置了一个URL重写,当我手动设置或输入URL时,它可以正常工作。但是,例如,当我在页面中使用<cfoutput>
标签中的链接时,该链接会复制字符串。
我正在使用 ColdFusion 2016 和 IIS 10
例如,网址是
www.site.com/results.cfm?lang=1&categoryid=2&budegtid=all&typeid=all&propertyid=316
我希望它输出像
www.site.com/properties/en/all/all/all/316
它有效,但是当我使用设置链接时似乎很开心......<cfoutput>
使用查询...
<cfif getProps.recordcount>
<cfoutput query = "getProps" startrow="#url.start#" maxrows="#perpage#">
<a href="property/#lang#/#category_id#/#budgetid#/#typeid#/#getProps.property_id#" id="listVewButton">View</a>
</cfoutput>
页面上链接中的结果输出为www.site.com/properties/en/all/all/all/316/properties/en/all/all/all/316
我已将网络/配置设置为
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="false" />
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
<rewrite>
<rules>
<rule name="Property list URL rewrite">
<match url="^property/([_0-9a-z-]+)/([_0-9a-z-]+)/budget-range-([_0-9a-z-]+)/([_0-9a-z-]+)/([_0-9a-z-]+)" />
<action type="Rewrite" url="resultsproperty.cfm?lang={R:1}&categoryid={R:2}&budegtid={R:3}&typeid={R:4}&propertyid={R:5}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
<httpErrors errorMode="Detailed" />
</system.webServer>
</configuration>
ColdFusion cfquery 如下...
<cfquery name="getProps" datasource="#session.odbcname#">
SELECT *
FROM properties P
INNER JOIN areas A
ON A.area_id = P.property_areaid
INNER JOIN categories C
ON C.category_id = P.property_propcategoryid
INNER JOIN price R
ON R.price_id = P.property_regularity
INNER JOIN types T
ON T.type_id = P.property_proptypeid
WHERE P.property_status != 'Off Market'
<cfif url.ref is not "all">
AND
(
property_ref like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#url.ref#%">
OR property_refid like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#url.ref#%">
OR property_town like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#url.ref#%">
)
</cfif>
ORDER BY P.property_refid
它似乎首先拉入实际的URL,然后添加重写。
任何帮助非常感谢。
您需要用正斜杠开始 href 以指示它来自根目录。href 在浏览器中解析/解释。不以正斜杠开头会告诉浏览器该 url 是相对于当前路径的。
例如,如果您在http://example.com/admin/
并且有一个 hreflogout
,它将被解析为http://example.com/admin/logout
.但是,如果您有 href/logout
它将解析为 'http://example.com/logout
。
正如你自己的答案所说,强制绝对路径是有效的,有时可以首选,但有时不是。 确保您了解根本问题。
通过在 coldfusion 应用程序文件中预先设置 URL 根来解决!即<cfset request.root = 'http://www.example.com/'>
,然后在链接中引用#request.root#
var,它会正确使用链接并且不会重复 URL。所以这是一个冷聚变问题,而不是URL重写问题。