URL ReWrite Friendly-URL不适用于新手程序员

时间:2015-12-03 05:26:24

标签: url-rewriting friendly-url

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

原谅我多余而且显而易见。详细写作是我知道如何理解我的观点的唯一方式。我希望它不是太多。

我搜索过该网站但找不到能够暗示我做错的答案。

所以,这是我的第一个问题:

已经安装了URL ReWrite并且似乎可以运行一些规则,但是我无法通过Friendly-URL重写来实现我想要的功能。那就是问题所在。我希望有人会使用我用过的相同基本参数来查看他们是否在Windows或Windows Server上遇到同样的问题。

我们网站上的公告部分是为了使用SQL数据库表中的ID(PK)指向一个

的URL而编写的。

公告(来自sql表中的列表),有很多类别,如工作,活动,车库销售等等。我知道,你们都知道

这对业余爱好者来说非常标准。所以,众所周知,这种URL方法不仅笨拙,可能存在安全隐患,但不会

很容易让我按照自己的意愿格式化网址。

通知的选择始于'选择'页:

www.domain.com/event/select.cfm

所以,目前点击select.cfm页面上的一个链接(从cfquery输出生成的列表) 我得到这个URL并被带到视图页面以显示实际的个人公告:

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

select.cfm和view.cfm都位于/ event /.

内的同一目录中

链接的锚点:href =" /event/view.cfm?id = #ViewInfo.ID#" (当然没有括号)。

除了我不想要的网址外,所有内容都显示并正常运行。

显然,文件夹/ event /只是在web根目录下,(公告目录),这是该规则应该运行的唯一地方。

那个' ID'我在sql表中使用的是JOBS类别中的公告号23。所有类别和公告都在

一张桌子。

要获得更友好的网址,我更喜欢使用'类别'每个公告和当前的日期'公告已保存,

看起来很正常,对吧?

除了我在编程方面几乎是全新的,并且真的犹豫到了这里。

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

www.domain.com/event/jobs/23/2015-12-2/view.cfm或其他变体。什么都没有按照我想要的方式发挥作用。

这是一团糟。

我很快就知道正斜杠需要在每个斜杠之间的硬盘驱动器上的实际目录,我无法找到它。我

为我的html突触添加了另一个缺口。我没有充分的理由想要创建大量的文件夹和子文件夹。所以,我想通过使用

URL ReWrite我可以这样做:

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

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

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

所以我偶然发现了URL REWRITE并安装了它。

我打开了IIS 8.5 Manager,转到了我正在使用的网站,然后转到/ event /文件夹并点击了URL REWRITE。然后我选择了添加规则

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

" /event/view.cfm ID =&#34?;在标签顶部,作为"内部网址"。

我还尝试对完整的URL进行硬编码,仅用于测试:" /event/view.cfm?id =" 23"他们没有工作。

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

但事实并非如此。我检查了' web.config' / event /目录中的文件(我将在此处包含)并且已编写代码规则

正确。但是当我点击view.cfm的链接时,我没想到URL的变化。它仍然表明了这一点:

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

我尝试了我能想到的网址ReWite中的每一个组合,但我无法获得指向URL的链接,无论如何,无论如何

我做了什么。我不明白。

我知道我安装的网址ReWrite正在运行,因为我使用另一个规则将所有发现的.htm文件转发到.cfm等效文件

找到它们时。

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

重新启动。仍然没有变化。它可以工作,但不能使用Friendly-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>

0 个答案:

没有答案