.htaccess 更改包含index.cfm的coldfusion URL网站

.htaccess 更改包含index.cfm的coldfusion URL网站,.htaccess,url,redirect,coldfusion,indexing,.htaccess,Url,Redirect,Coldfusion,Indexing,我是Coldfusion的初学者。我重新制作了一个同样用Coldfusion编码的整个网站。由于我不是专家,我使用了一些现有的代码来创建新网站。新的很好用,但是我的URL有问题。当我输入示例thedomain.com/test时,它工作正常,htaccess使它作为thedomain.com/index.cfm?myvar=test工作。但是,当我直接输入domain.com/index.cfm?myvar=test时,URL保持不变。该页面也可以工作,但两个页面都是同一个页面,这并不好 所以我

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

所以我的问题是:我如何将域名的URL重定向到域名的URL

我做了很多研究,但除了一些问题,我没有找到一个明确的答案。这似乎正是我想要达到的目标,但我不理解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”,因为谷歌翻译API问题


提前感谢您的回答。

好的,有两种方法可以解决您的问题:

.htaccess 这里的问题是,您要求执行的操作创建了一个无限循环(重定向到/se/friendly/url/如果它不是se-friendly,并且因为您希望能够轻松解析字符串,所以重定向到
?traditional=url
(不显示url更改,但这对重定向循环没有影响)

我认为,您必须做的是创建一个标志,比如我的stopht=1。如果用户在参数中的任何位置遇到stopht=1的url,该url将不会更改为se友好,它将保持
?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
<cfoutput><script>
  window.history.pushState("", "", "/index.cfm/#uid#/#JSStringFormat(PageTItle)#/#JSStringFormat(pid)#");
</script></cfoutput>
Javascript Javascript(当然,JQuery也是如此)能够通过历史操作将浏览器的url更改为同一域上的某个内容,而无需重定向用户

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

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
<cfoutput><script>
  window.history.pushState("", "", "/index.cfm/#uid#/#JSStringFormat(PageTItle)#/#JSStringFormat(pid)#");
</script></cfoutput>

window.history.pushState(“,”,“/index.cfm/#uid#/#JSStringFormat(PageTItle)#/#JSStringFormat(pid)#”;
你不能跨域这么做(所以我不能让我的网站url改成paypal.com来假装是paypal),但你可以相对于你自己的域这么做

不幸的是,这段代码不能在这个站点或JSFIDLE上演示,但是它插入起来非常简单,并且在您自己的域中不会引起安全问题


缺点是它不会影响每个人,因为javascript可以被禁用。优点是没有任何开销增益,虽然htaccess必须使用像我的视图文章这样的通用标题,但javascript+cf可以显示页面标题。

这对我来说似乎不是一个ColdFusion问题,而是一个.htaccess问题。请编辑并添加您r.htaccess代码感谢您的回复,javascript方法对我有效。我尝试了.htaccess方法,但没有成功。也许我没有正确使用它。但是对于javascript,我使用它时附带了一些条件,以便正确完成我的工作,并且它可以按照我的要求工作。@J-P-Dude谢谢:)。如果愿意,您可以通过单击箭头上方和下方的复选标记来选择此选项作为答案。一旦你的声望超过15,你也可以投票选择答案。祝您今天过得愉快!