【问题标题】:Classic ASP URL Rewriting经典的 ASP URL 重写
【发布时间】:2009-10-26 11:44:32
【问题描述】:

我想知道当您无权访问 IIS 进行任何重写更改时,是否可以使用经典 ASP 进行 URL 重写?

我们有一个在线商店,其中产品通常链接为 /product.asp?ContentID=X,但希望有一些对 SEO 更友好的东西,例如 /product/unique-product-name

不幸的是,我们在一个共享的托管平台上,并且当前的托管服务提供商不愿意在他们的服务器上安装额外的组件,以防它们给其他人带来问题。 :(

【问题讨论】:

    标签: asp-classic url-rewriting


    【解决方案1】:

    稍后的答案,但可以帮助您或其他人。

    我有时仍然使用经典的 ASP 进行编码,并且由于共享主机等原因,我也曾在一段时间内为 URL 重写而苦苦挣扎。

    当我自己手动或通过询问服务器支持团队访问 IIS 设置时,我使用了 404 错误方法。虽然这有效,但效果并不好。它比“正常”方式稍慢,并且疯狂地阻塞了我的错误报告。

    自从 IIS7 出现后,我找到了一个提供 IIS7 URL 重写模块的托管服务提供商(对我来说是 GoDaddy),我现在要做的就是将 web.config 文件上传到我的根目录应用程序和 URL 重写工作完美。

    所以我的建议是,如果可以的话,请将您的应用程序转移到提供此服务的托管服务提供商。如果您确实更改了主机,您只需要一个 web.config 文件(如下),将其上传到根目录即可。您根本不需要联系房东。

    将此保存为 web.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Rewrite to friendly URL">
                          <match url="^blog/([0-9]+)/([_0-9a-z-]+)" />
                          <action type="Rewrite" url="blog/article.asp?id={R:1}&amp;title={R:2}" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    如果有人进入:

    http://mydomain.com/blog/1/the-article-title

    ...它将被重写为:

    http://mydomain.com/blog/article.asp?id=1&amp;title=the-article-title

    享受

    【讨论】:

      【解决方案2】:

      可能不会。

      您至少应该更改 404 页面的 IIS 配置,以便您的代码可以控制。

      【讨论】:

        【解决方案3】:

        我已经做到了。这很笨拙但可行。

        正如另一位评论者所说,您可以拥有一个自定义 404 页面。您至少需要与您的托管服务提供商合作来更改 IIS 以将 404 错误发送到您目录中的自定义页面。他们不应该对此有任何问题。不会影响其他用户。

        据我所知,在您的自定义 404 ASP 页面上,您真正可以访问的只是通过 Request.ServerVariables("QUERY_STRING") 访问的原始 URL

        然后您可以解析其中的内容并使用 Server.Transfer 重定向到所需的任何内容(不是 Response.Redirect,因为您想要无缝的服务器端重定向而不是客户端重定向)

        确保您也有一个应对实际 404 错误的案例!

        【讨论】:

        • 我也做过这个。这很糟糕,您可能需要一些表单中的解决方法,但如果没有其他方法可用,它可以正常工作。
        • mgroves,你是如何处理表单 POST 的?
        • 我用了几种方法,但我认为最简单的方法是在你的 post 属性中使用普通的“.asp” URL。我认为您也可以通过在 404 陷阱中使用 server.transfer 来完成它。
        猜你喜欢
        • 1970-01-01
        • 2014-05-25
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 2010-11-08
        相关资源
        最近更新 更多