URL重写web.config

时间:2013-05-24 14:42:40

标签: url mod-rewrite url-rewriting

我需要帮助重写网址。我的php站点在Windows服务器上运行。我正在尝试重写网址,因此类别和文章都是这样的:

hxxp://domain.com/category-name
hxxp://domain.com/article-title

这就是我在web.config中所拥有的。它适用于类别,但不适用于文章,我做错了什么?

<rule name="category">
    <match url="^([_0-9a-z-]+)" />
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
    <action type="Rewrite" url="category.php?slug={R:1}" />
</rule>
<rule name="article">
    <match url="^([_0-9a-z-]+)" />
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
    <action type="Rewrite" url="article.php?slug={R:1}" />
</rule>

1 个答案:

答案 0 :(得分:0)

因为规则是按照显示的顺序触发的。因此,当您想要重写文章时,您需要一些东西来避免触发第一条规则。

例如,遵循您的惯例,可能是:

<rule name="category">
    <match url="^category-([_0-9a-z-]+)" />
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
    <action type="Rewrite" url="category.php?slug={R:1}" />
</rule>
<rule name="article">
    <match url="^article-([_0-9a-z-]+)" />
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
    <action type="Rewrite" url="article.php?slug={R:1}" />
</rule>

只有当路径以category-开头时才会触发第一条规则,而只有当路径以article-开头时才会触发第一条规则。

请注意,使用{R:1}作为后退参考,您将只拥有category-article-之后的内容,因此如果您希望保持与以前相同的行为,则可以使用{{1相反。