Url rewriting URL重写友好的URL不适用于新手程序员

Url rewriting URL重写友好的URL不适用于新手程序员,url-rewriting,friendly-url,Url Rewriting,Friendly Url,我们在Windows 2012 R2、ColdFusion 11 Enterprise、IIS 8.5和SQL 2008上使用Microsoft的URL重写64位版本 请原谅我的多余和明显。详细地写是我知道如何表达观点的唯一方法。我希望不会太多 我已经搜索了这个网站,但是找不到一个暗示我做错了什么的答案 这是我的第一个问题: URL重写已经安装,并且似乎可以按照一些规则运行,但我无法让它按照我希望的方式使用友好的URL重写。这就是问题所在。我希望有人会使用与我相同的基本参数,看看他们是否在Win

我们在Windows 2012 R2、ColdFusion 11 Enterprise、IIS 8.5和SQL 2008上使用Microsoft的URL重写64位版本

请原谅我的多余和明显。详细地写是我知道如何表达观点的唯一方法。我希望不会太多

我已经搜索了这个网站,但是找不到一个暗示我做错了什么的答案

这是我的第一个问题:

URL重写已经安装,并且似乎可以按照一些规则运行,但我无法让它按照我希望的方式使用友好的URL重写。这就是问题所在。我希望有人会使用与我相同的基本参数,看看他们是否在Windows或Windows服务器上遇到相同的问题

我们网站上的公告部分是使用SQL数据库表中的ID PK来指向

从sql表中的列表中发布,包含许多类别,如作业、事件、车库销售等。我知道,你们都知道

这对于业余爱好者来说是相当标准的。所以,正如您所知道的,这个URL方法不仅笨拙,可能会带来安全风险,而且不会

很容易让我格式化的网址,因为我想

从“选择”页面开始选择公告:

www.domain.com/event/select.cfm

因此,当前,当单击select.cfm页面上的一个链接时,将显示从cfquery输出生成的列表 我获取此URL并转到查看页面以显示实际的个人公告:

select.cfm和view.cfm都位于/event/内的同一目录中

链接的锚点:href=/event/view.cfm?id=ViewInfo.id,当然不带括号

除了我不想要的URL外,所有内容都显示良好,工作正常

显然,文件夹/event/不在web根目录下,公告目录是此规则应操作的唯一位置

我在sql表中使用的“ID”是JOBS类别中的23号公告。所有类别和公告仅在

这是一张桌子

为了获得更友好的URL,我更喜欢使用每个公告的“类别”和公告保存的当前“日期”,这

看起来很正常,对吧

除了我几乎是一个编程新手,我真的很犹豫来这里

无论如何,在尝试使用URL重写之前,我首先尝试这样做:

www.domain.com/event/jobs/23/2015-12-2/view.cfm或一些变体。没有一件事是我想要的

真是一团糟

我很快了解到正斜杠需要硬盘上每个斜杠之间有一个实际的目录,我找不到绕过它的方法。我

为我的html synapse添加了另一个缺口。我不想无缘无故地创建成吨的文件夹和子文件夹。所以,我想通过使用

URL重写我可以这样做:

www.domain.com/event/jobs-2015-12-2_3.html或一些疯狂的变体。几天后,我的大脑受了太多的伤害

我想通过这种方式,我摆脱了id=和.cfm文件,并添加了一个更有意义且更易于参考的类别。我

实际上可能会使用uniqueidentifier的一部分而不是PK ID,但这对于这个问题并不重要

所以我偶然发现了URL重写并安装了它

我打开了IIS8.5管理器,转到我正在使用的网站,转到/event/文件夹并单击URL重写。然后我选择了添加规则

和用户友好的URL。然后,我输入了其中一个公告的URL:

/event/view.cfm?id=位于选项卡顶部,作为内部URL

我还努力编写完整的URL,只是为了测试:/event/view.cfm?id=23,但它们不起作用

对于每个测试,我在第二行输入第二个示例建议:/id/184/只是为了看看它是否有效

但事实并非如此。我检查了“web.config”文件,该文件将包含在/event/目录中,代码规则已经编写好

没错。但是当我点击view.cfm的链接时,URL并没有像我预期的那样发生变化。它仍然表明:

www.domain.com/event/view.cfm?id=23

我尝试了我能想到的URL倒带的每一种组合,但我根本无法改变URL的链接,无论是什么

我所做的。我不明白

我知道我安装的URL重写正在工作,因为我使用另一条规则将所有发现的.htm文件转发到.cfm等效文件

当他们被发现时

我甚至修复了已安装的URL重写并重新启动,但这没有帮助。然后我卸载了URL重写并重新安装

重新启动。还是没有变化。它可以工作,但不与友好的URL重写。我显然做错了什么,但我完全不知所措

可能需要雇佣一个真正的程序员。这可能是我新工作的结束

所以,希望有人能引导我 在正确的方向。如果是这样,我承诺尽我所能学习和帮助他人

这是我的web.config

    <?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="RedirectUserFriendlyURL1" stopProcessing="true">
                    <match url="^event/view\.cfm$" />
                    <conditions>
                        <add input="{REQUEST_METHOD}" pattern="^POST$"   negate="true" />
                        <add input="{QUERY_STRING}" pattern="^([^=&amp;]+)=  ([^=&amp;]+)$" />
                    </conditions>
                    <action type="Redirect" url="event/view/{C:1}/{C:2}" appendQueryString="false" />
                </rule>
                <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                    <match url="^event/view/([^/]+)/([^/]+)/?$" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile"  negate="true" />
                        <add input="{REQUEST_FILENAME}"  matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="event/view.cfm?{R:1}={R:2}" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="OutboundRewriteUserFriendlyURL1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Form, Img"  pattern="^(.*/)event/view\.cfm\?id=([^=&amp;]+)$" />
                    <action type="Rewrite" value="{R:1}event/view/id/{R:2}/" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>