Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 在ColdFusion中解析整个URL_.htaccess_Coldfusion_Url Rewriting - Fatal编程技术网

.htaccess 在ColdFusion中解析整个URL

.htaccess 在ColdFusion中解析整个URL,.htaccess,coldfusion,url-rewriting,.htaccess,Coldfusion,Url Rewriting,我试图弄清楚如何在ColdFusion中解析整个URL 我所说的完整URL指的是链接以下内容的内容- 我可以通过使用CGI.HTTP_主机来了解第一部分,该主机提供了-subdomain.domainname.com。我不知道如何读取URL的-crm/leads/view/部分 有一个变量可以用来读取吗?我发现一些UDF可以为我解析完整的字符串,但是我需要能够传递完整的URL 我还使用了URL重写,这使它变得复杂一些。URL可以是,但实际提供服务的页面是 我知道这是许多框架的工作方式,其中所有U

我试图弄清楚如何在ColdFusion中解析整个URL

我所说的完整URL指的是链接以下内容的内容-

我可以通过使用CGI.HTTP_主机来了解第一部分,该主机提供了-subdomain.domainname.com。我不知道如何读取URL的-crm/leads/view/部分

有一个变量可以用来读取吗?我发现一些UDF可以为我解析完整的字符串,但是我需要能够传递完整的URL

我还使用了URL重写,这使它变得复杂一些。URL可以是,但实际提供服务的页面是

我知道这是许多框架的工作方式,其中所有URL都被路由到一个文件,然后解析URL并将其定向到某个控制器和操作

这是我的.htaccess文件的副本:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.cfm [NC,L]
RewriteEngine On
RewriteCond %{THE_REQUEST} /crm/([^?\ ]+) 
RewriteRule ^.*$ /public/index.cfm/%1 [NC,L]
RewriteEngine Off
对此的任何反馈都将非常好


谢谢

好的,我将根据上面的SES URL、您正在尝试做的事情以及如何将其转化为下面的CGI.PATH_信息来做一些假设

根目录.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.cfm [NC,L]
RewriteEngine On
RewriteCond %{THE_REQUEST} /crm/([^?\ ]+) 
RewriteRule ^.*$ /public/index.cfm/%1 [NC,L]
RewriteEngine Off
/公共目录。htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.cfm [NC,L]
RewriteEngine On
RewriteCond %{THE_REQUEST} /crm/([^?\ ]+) 
RewriteRule ^.*$ /public/index.cfm/%1 [NC,L]
RewriteEngine Off
这将重定向到CGI.PATH_INFO进行解析。请继续阅读,了解如何解析它

当你使用搜索引擎安全(SES)URL时,你的键/值都被前斜杠分隔,CordDeFixl会在CGI.PATHOFION服务器变量中考虑这些,通常是为目录保留的。

因此,知道了这一点,可以使用简单的提取机制来解析它:

<cfset SESQueryString = CGI.PATH_INFO />

<cfset num_pairs = ListLen(SESQueryString,'/') />

<cfset keyVals = StructNew() />

<cfloop from="1" to="#num_pairs#" step="2" index="i">
     <cfset keyVals[ListGetAt(SESQueryString,i,'/')] = ListGetAt(SESQueryString,i+1,'/') />
</cfloop>

<cfdump var=#keyVals#>

请记住,此答案假设您在CGI.PATH_INFO中有偶数个key/val匹配项。还请记住,CF中的List*函数(在许多情况下)将丢弃一个空列表值,因此您可能会认为您有一个偶数,而实际上您没有


扫描Adobe LiveDocs或cfquickdocs.com上的列表函数,查看您正在使用的列表函数是否有一个可以传递的参数,该参数将导致它强制列表中的空列表值不被丢弃。一个这样的函数是
ListToArray()

好的,我将根据上面的SES URL、您试图做的事情以及如何将其转换为下面的CGI.PATH\u信息来做一些假设

根目录.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.cfm [NC,L]
RewriteEngine On
RewriteCond %{THE_REQUEST} /crm/([^?\ ]+) 
RewriteRule ^.*$ /public/index.cfm/%1 [NC,L]
RewriteEngine Off
/公共目录。htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.cfm [NC,L]
RewriteEngine On
RewriteCond %{THE_REQUEST} /crm/([^?\ ]+) 
RewriteRule ^.*$ /public/index.cfm/%1 [NC,L]
RewriteEngine Off
这将重定向到CGI.PATH_INFO进行解析。请继续阅读,了解如何解析它

当你使用搜索引擎安全(SES)URL时,你的键/值都被前斜杠分隔,CordDeFixl会在CGI.PATHOFION服务器变量中考虑这些,通常是为目录保留的。

因此,知道了这一点,可以使用简单的提取机制来解析它:

<cfset SESQueryString = CGI.PATH_INFO />

<cfset num_pairs = ListLen(SESQueryString,'/') />

<cfset keyVals = StructNew() />

<cfloop from="1" to="#num_pairs#" step="2" index="i">
     <cfset keyVals[ListGetAt(SESQueryString,i,'/')] = ListGetAt(SESQueryString,i+1,'/') />
</cfloop>

<cfdump var=#keyVals#>

请记住,此答案假设您在CGI.PATH_INFO中有偶数个key/val匹配项。还请记住,CF中的List*函数(在许多情况下)将丢弃一个空列表值,因此您可能会认为您有一个偶数,而实际上您没有


扫描Adobe LiveDocs或cfquickdocs.com上的列表函数,查看您正在使用的列表函数是否有一个可以传递的参数,该参数将导致它强制列表中的空列表值不被丢弃。其中一个函数是
ListToArray()

谢谢您的回复。这是有道理的,但是当我在CGI.PATH_信息中打开重写时,它是空白的。可能我的.htaccess文件有问题。这里是我拥有的:RewriteCond%{REQUEST_FILENAME}-s[或]RewriteCond%{REQUEST_FILENAME}-l[或]RewriteCond%{REQUEST_FILENAME}-d RewriteRule^.*$-[NC,l]RewriteRule^.*$index.cfm[NC,l]事实上,两个独立的问题——我的答案只针对设置后如何解析CGI.PATH_信息。另一部分是一个.htaccess重写问题,所以我为您标记了它。您可能需要编辑问题,以便获得正确的.htaccess文件重写规则,从而正确保留您的CGI.PATH_信息。好的,我明白您的意思。你说得对,我在公用文件夹中有.htaccess权限。我将尝试在根目录中添加一个,然后尝试这些设置。现在就离开电脑,但我稍后会试试。谢谢你的帮助。记住:每个目录一个.htaccess文件。此解决方案至少需要两个,一个在根目录中,一个在目标文件夹中,对您来说,它看起来是/public。感谢您的响应。这是有道理的,但是当我在CGI.PATH_信息中打开重写时,它是空白的。可能我的.htaccess文件有问题。这里是我拥有的:RewriteCond%{REQUEST_FILENAME}-s[或]RewriteCond%{REQUEST_FILENAME}-l[或]RewriteCond%{REQUEST_FILENAME}-d RewriteRule^.*$-[NC,l]RewriteRule^.*$index.cfm[NC,l]事实上,两个独立的问题——我的答案只针对设置后如何解析CGI.PATH_信息。另一部分是一个.htaccess重写问题,所以我为您标记了它。您可能需要编辑问题,以便获得正确的.htaccess文件重写规则,从而正确保留您的CGI.PATH_信息。好的,我明白您的意思。你说得对,我在公用文件夹中有.htaccess权限。我将尝试在根目录中添加一个,然后尝试这些设置。现在就离开电脑,但我稍后会试试。谢谢你的帮助。记住:每个目录一个.htaccess文件。这个解决方案至少需要两个,一个在根目录中,一个在目标文件夹中,对于您来说,它看起来是/public。