【问题标题】:Changing coldfusion URL website that contain index.cfm更改包含 index.cfm 的 Coldfusion URL 网站
【发布时间】:2014-11-13 21:01:07
【问题描述】:

我是 Coldfusion 的初学者。我重新制作了一个同样用 Coldfusion 编码的整个网站。由于我不是专家,所以我使用了一些现有代码来制作新网站。新的一切都很好,但我的 URL 有问题。当我输入例如thedomain.com/test 时,它工作正常,htaccess 使它像thedomain.com/index.cfm?myvar=test 一样工作。但是,当我直接输入thedomain.com/index.cfm?myvar=test 时,URL 保持不变。该页面也可以,但是两个页面是相同的,这不好。

所以我的问题是:我如何将那个 URL thedomain.com/index.cfm?myvar=test 重定向到那个 thedomain.com/test

我做了很多研究,但没有找到明确的答案,除了this answer。这似乎是我想要达到的确切内容,但我不明白 htaccess 的术语和含义......我不明白如何使用它。

这是我的 .htaccess 代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(?i)^[\\/]CFFileServlet
RewriteRule ^(.*) index.cfm?variables=$1

RewriteCond %{HTTP_HOST} ^machineries-forestieres\.com [NC]
RewriteRule ^(.*)$ http://www.machineries-forestieres.com/$1 [L,R=301]

代码的第二部分是在没有“www”时重定向到«www»,因为 google translate API 问题。

提前感谢您的回答。

【问题讨论】:

  • 对我来说这似乎不是一个 ColdFusion 问题,而是一个 .htaccess 问题。
  • 请编辑并添加您的 .htaccess 代码

标签: .htaccess url redirect coldfusion indexing


【解决方案1】:

好的,有两种方法可以实现:

.htaccess

这里的问题是你要求做的事情创建了一个无限循环(重定向到 /se/friendly/url/ 如果它不友好,并且因为你希望能够轻松解析字符串,重定向到(不显示url 更改,但这对重定向循环没有影响)?traditional=url

我认为,您必须做的是创建一个标志,例如我的 stopht=1。如果用户在参数中的任何位置遇到了 stopht=1 的 url,则该 url 不会更改为 se-friendly,它将保持?traditional=url&stopht=1

理想情况下,用户没有理由看到 stopht=1,因为它对 SE 友好的 URL 是隐藏的。

RewriteCond %{QUERY_STRING} (?!.*stopht=1.*)uid=([0-9]+)&pid=([0-9a-zA-Z-_]+)
RewriteRule ^index\.cfm$ /index.cfm/%1/View-Article/%2/? [L,R=301]

RewriteRule ^index.cfm/([0-9]+)/([_0-9a-zA-Z-]+)/([0-9a-zA-Z-_]+) /index.cfm?stopht=1&uid=$1&pid=$3

所以,转换成你的 index.cfm/myvar 就是这样

RewriteCond %{QUERY_STRING} (?!.*stopht=1.*)myvar=([0-9a-zA-Z-_]+)
RewriteRule ^index\.cfm$ /index.cfm/myvar/%1/? [L,R=301]

RewriteRule ^index.cfm/myvar/([_0-9a-zA-Z-]+) /index.cfm?stopht=1&myvar=$1

Javascript

Javascript(是的,JQuery 也是如此)能够通过历史操作将浏览器的 url 更改为同一域上的内容,而无需重定向用户。

在这里,结合冷聚变,你可以做这样的事情

<cfoutput><script>
  window.history.pushState("", "", "/index.cfm/#uid#/#JSStringFormat(PageTItle)#/#JSStringFormat(pid)#");
</script></cfoutput>

你不能跨域做这个(所以我不能让我的网站 URL 说 paypal.com 试图假装是 paypal)但你可以相对于你自己的域做。

很遗憾,此代码无法在此站点或 jsfiddle 上演示,但插入起来确实非常简单,并且不会在您自己的域中引起安全问题。

缺点是它不会影响所有人,因为可以禁用 javascript。好处是根本没有额外开销,虽然 htaccess 必须使用像我的 View-Article 这样的通用标题,但 javascript+cf 可以显示页面标题。

【讨论】:

  • 感谢您的回复,javascript 方法对我有用。我尝试了 .htaccess 方法,但没有成功。也许我没有正确使用它。但是对于 javascript,我在某些条件下使用它来正确完成我的工作,并且它可以按我的意愿工作。
  • @J-P-Dude 谢谢 :)。如果您愿意,可以通过单击箭头上方和下方的复选标记来选择此作为答案。一旦您获得超过 15 的声望,您也可以为答案投票。祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多