我是Coldfusion的初学者。我重新制作了一个也在Coldfusion中编码的整个网站。由于我不是专家,我采用了一些现有的代码来制作新网站。新的一切都很好,但我的URL有问题。当我输入例如thedomain.com/test
时,它工作正常,htaccess使其工作为thedomain.com/index.cfm?myvar=test
。但是,当我直接输入thedomain.com/index.cfm?myvar=test
时,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»,因为谷歌翻译API问题。
提前感谢您的回答。
答案 0 :(得分:0)
好的,您有两种方法可以做:
这里遇到的麻烦就是你要做的事情会创建一个无限循环(重定向到/ se / friendly / url /如果它不友好,并且因为你希望能够轻松地解析字符串,重定向to(不显示网址更改,但这对重定向循环没有影响)?traditional=url
。
我认为,你必须做的是创建一个标志,就像我的stopht = 1。如果用户在参数中的任何位置找到了stopht = 1的网址,则该网址将不会更改为友好,它将保留?traditional=url&stopht=1
。
理想情况下,用户没有理由看到stopht = 1,因为它隐藏在SE友好的网址中。
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(是的,JQuery也是如此)能够通过历史记录操作将浏览器的网址更改为同一域上的某些内容,而无需重定向用户。
在这里,结合冷融合,你可以做这样的事情
<cfoutput><script>
window.history.pushState("", "", "/index.cfm/#uid#/#JSStringFormat(PageTItle)#/#JSStringFormat(pid)#");
</script></cfoutput>
你不能跨域工作(所以我不能让我的网站url说paypal.com试图伪装成贝宝)但你可以相对于你自己的域名做这件事。 / p>
不幸的是,此代码无法在此网站或jsfiddle上进行演示,但插入时非常简单,并且在您自己的域中不会引起任何安全问题。
缺点是它不会影响所有人,因为可以禁用javascript。好处是没有任何开销,而htaccess必须使用像我的View-Article这样的通用标题,javascript + cf可以显示页面标题。