我需要帮助重写网址。我的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>
答案 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相反。