1

我正在尝试重写网址以使它们对搜索引擎友好

www.mydomain.com/qa/213/who-am-i

重写为

www.mydomain.com/qa/?qa=213/who-am-i

下面的块有效,但问题是页面内的 js/css/images url也被重写了。因此,该页面会查找像 www.mydomain.com/qa/213/who-am-i/jquery.js 这样实际上不存在的文件。所以页面加载了,但是 css、.js 和图像都不起作用。

 <rule name="CleanRouting" stopProcessing="true">
          <match url="^qa/(.*)/(.*)$" ignoreCase="true" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="true" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite" url="qa/?qa={R:1}/{R:2}&amp;{QUERY_STRING}" appendQueryString="false" />
        </rule>

请告诉我如何解决这个问题。我正在使用 Asp.Net MVC(如果重要的话)。

4

1 回答 1

2

经过几个小时和几天后,我终于找到了正确的 IIS 重写规则,用于绕过图像/css/js 等文件,以便页面正确显示。

必须将以下重写规则添加到您的 ASP.Net MVC 项目的 Web.Config。

<!--Rewrite all paths containing a period like www.conceptworld.com/qa/453/who-am-i/qa-images/search.png to  www.conceptworld.com/qa/qa-images/search.png -->

<rule name="RewriteFileUrls" stopProcessing="true">
          <match url="^qa\/([^\/]*)\/([^\/]*)\/(.*[\.].*)$" ignoreCase="true" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="true" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite" url="qa/{R:2}/{R:3}" appendQueryString="false" />
        </rule>

对于类似于 StackOverflow的Question2Answer Question Answer PHP 解决方案,我使用上述规则加上以下 2 条规则。我已经在带有 IIS + Asp.Net MVC 的 Windows 系统上安装了Question2Answer 。

<!--Rewrites urls like www.conceptworld.com/qa/tags -->

<rule name="RewriteSingleLevelUrls" stopProcessing="true">
          <match url="^qa\/([^\/]*)$" ignoreCase="true" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="true" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite" url="qa/?qa={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
        </rule>

<!--Rewrites urls like www.conceptworld.com/qa/56/who-am-i -->
        <rule name="RewriteTwoLevelUrls" stopProcessing="true">
          <match url="^qa\/([^\/]*\/[^\/]*)$" ignoreCase="true" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="true" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite" url="qa/?qa={R:1}&amp;{QUERY_STRING}" appendQueryString="false" />
        </rule>

仅仅设置上述规则是不够的。最重要的是在Question2Answer中设置您的基本网址。我几乎放弃了,并认为当 Question2Answer 安装在 Windows (IIS + Asp.Net MVC) 上时,它不可能有对 SEO 友好的 URL,直到我发现了这个设置。感谢 Question2Answer 开发人员 :)

转到 Admin/Layout 并设置基本 url,如下所示:

Question2Answer - 管理/布局页面

现在您已准备好与 IIS Asp.Net MVC 一起运行 Question2Answer。

于 2015-11-13T08:29:35.267 回答