0

我在 url 重写方面需要一点帮助。我的 php 站点在 windows 服务器上运行。我正在尝试重写 url,因此类别和文章都如下所示:

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>
4

1 回答 1

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-{R:0}

于 2013-05-24T16:32:08.073 回答