【问题标题】:IIS URL rewrite rule redirect with mask?IIS URL重写规则重定向与掩码?
【发布时间】:2012-05-27 13:58:03
【问题描述】:

我有一个这样的网址:

http://www.example.com/erf4d

(其中 erf4d 可以是任意 5 个字符的字符串)

我想将用户重定向到:

http://www.example.com/viewentry.aspx?ID=erf4d

我已经使用 web.config 中的重写规则完成了这项工作,但是我希望这样做 http://www.example.com/erf4d 保留在 URL 栏中,这样用户就不会看到“丑陋”的 viewentry.aspx?ID=erf4d 一种重定向掩码,如果你愿意的话。有没有办法做到这一点?

【问题讨论】:

    标签: iis url-rewriting rewrite


    【解决方案1】:

    根据我的经验,URL 重写是反过来使用的。所以页面实际上是 viewentry.aspx?ID=123 并且重定向会将其重定向到 /123。

    我认为你可能做错了?如果您使用 IIS 7 中的向导为 SEO 友好的 URL 设置 URL 重写并使用 viewentry.aspx?ID=erf4d 作为基础,它应该可以帮助您到达您需要的地方。

    重定向/重写工作,所以如果你去 test.com/123 它会工作,但如果你去 test.com/view.aspx?ID=123,它会把你送到 test.com/123 .我认为你追求的是哪一个?

    干杯

    编辑:这是我使用的一个例子。它将读取 news.aspx?page=1 并重写为 news/1/。但由于规则,news/1/ 实际上也可以正常工作,因此如果需要,可以在锚点中以这种方式引用。

                <rule name="Redirect - /news.aspx?page=a to /news/a/" enabled="true" stopProcessing="true">
                    <match url="^news\.aspx$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
                        <add input="{QUERY_STRING}" pattern="^page=([0-9]{1,3})$" />
                    </conditions>
                    <action type="Redirect" url="news/{C:1}" appendQueryString="false" />
                </rule>
                <rule name="Rewrite - /news/a/ to page=a" enabled="true" stopProcessing="true">
                    <match url="^news/([^/]+)/?$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="news.aspx?page={R:1}" />
                </rule>
    

    【讨论】:

    • 谢谢我玩过你的例子,但无法让它做任何事情:(我不知道为什么我不能解决这个问题。这是我第一次尝试 URL 重写。我想要完成的是像 instagram 这样的用户有一个像 test.com/abc123 这样的 URL 并且他们看到了内容.在我的例子中 abc123 是内容的 id 所以 viewContent.aspx?ID=abc123 是实际应该的在 URL 中输入 test.com/abc123 时显示。有没有比 URL 重写重定向更好的方法?
    • 这里是我当前的规则:&lt;rule name="short plan" stopProcessing="true"&gt; &lt;match url="(?!.*test.com/.*)[a-zA-Z0-9]{5}(?!.*.aspx.*)(?!.*.png.*)(?!.*.jpg.*)(?!.*.gif.*)" /&gt; &lt;action type="Redirect" url="http://www.test.com/viewPlan.aspx?ID={R:0}" redirectType="Permanent" /&gt; &lt;/rule&gt; 将我从 test.com/abc123 带到实际页面,但显示 URL
    • 您是否尝试过查看 IIS.NET 上的文档? (learn.iis.net/page.aspx/461/…)。那里的示例与您尝试实现的目标非常匹配。您需要 REDIRECT RULE 和 REWRITE RULE。他们携手合作。不确定这一切都可以在一个规则中实现!如有其他问题,请告诉我。
    • 你帮了大忙,经过更多的尝试和错误,我让你的例子起作用了。我确实需要更多地研究这一点才能真正掌握它,但您的上述解决方案已被接受!再次感谢您
    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 2011-08-07
    • 2015-11-18
    • 2014-05-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多