Перезапись URL IIS с ColdFusion сохраняет строку дубликатов - PullRequest
2 голосов
/ 14 января 2020

Я настроил перезапись URL, которая прекрасно работает, когда я вручную задаю или набираю URL. Но когда я использую ссылку на странице в теге <cfoutput>, например, ссылка дублирует строку.

Я использую ColdFusion 2016 с IIS 10

Например, URL-адрес

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

У меня web / config установлен как

    <?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}&amp;categoryid={R:2}&amp;budegtid={R:3}&amp;typeid={R:4}&amp;propertyid={R:5}" appendQueryString="false" />
</rule>
</rules>
    </rewrite>
        <httpErrors errorMode="Detailed" />
  </system.webServer>
</configuration>

Cfquery ColdFusion выглядит следующим образом ...

<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, а затем добавляет перезапись.

Любая помощь высоко ценится.

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Вы должны начать href с прямого слэ sh, чтобы указать, что он с root. Href разрешается / интерпретируется в браузере. Не начиная с forward sla sh сообщает браузеру, что URL относится к текущему пути.

Если вы находитесь на http://example.com/admin/ и у вас есть href logout, например, он будет решен как http://example.com/admin/logout. Однако, если у вас есть href /logout, он разрешится в 'http://example.com/logout.

. Как сказано в вашем собственном ответе, принудительное использование абсолютного пути работает и может быть предпочтительным, но иногда нет. Убедитесь, что вы понимаете основную проблему.

0 голосов
/ 14 января 2020

Решено! предварительно установив URL-адрес root в файле приложения coldfusion, т.е. <cfset request.root = 'http://www.example.com/'>, а затем сославшись на переменную #request.root# в ссылке, он использует ссылку правильно и не дублирует URL-адрес. Так что это проблема холодного объединения, а не проблема перезаписи URL.

...