web.config用mysql数据库中的名称重写url

8yparm6h  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(350)

我有一个web.config文件,我用它友好地重写url,如下所示:

<configuration>
    <system.webServer>

        <rewrite>
            <rules>

                // rewrites here
                <rule name="articles" stopProcessing="true">
                    <match url="^article/([0-9]+)/?$" ignoreCase="true" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/article.asp?id={R:1}" appendQueryString="true" />
                </rule>

            </rules>
        </rewrite>

    </system.webServer>
</configuration>

但是我需要显示mywebsite.com/article/1/数据库中文章的名称,例如mywebsite.com/title article/。我已经做了一个很好的研究,但我没有找到任何真正解释如何做。

rryofs0p

rryofs0p1#

我认为这在web.config中是不可能的,因为web.config不能查询数据库。您所能做的就是为articles表中的每个页面创建一个单独的重写规则。
您的另一个选项,以及在iisurl重写模块出现之前使用得更多的选项,是创建一个自定义404页并将逻辑放在该页中。
在配置文件的system.webserver部分添加以下内容:

<httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/404.asp" responseMode="ExecuteURL" />
</httpErrors>

在404页面上,您可以检索将用户带到带有

Request.ServerVariables("query_string")

然后可以使用vbscript获取所需的url部分,并在数据库查询中使用它。我建议您使用示例中的url模式

Dim TitleArticle
TitleArticle = Replace(Request.ServerVariables("query_string"),"404;http://mywebsite.com/","")

你可以用 TitleArticle 在数据库查询中查找所需的页面,然后 Server.Transfer 将用户带到那里,同时在地址栏中保留友好的url。我建议使用 Response.Write TitleArticle 在测试以确保向数据库发送正确的值时。
显然,这都需要在条件语句中,并且 Else 条件是显示标准404消息

相关问题