IIS Rewrite 甚至重写 images/css/js - 导致 404 not found
IIS Rewrite even rewrites images/css/js - results in 404 not found
我正在尝试重写 url 以使它们对搜索引擎友好
www.mydomain.com/qa/213/who-am-i
重写为
www.mydomain.com/qa/?qa=213/我是谁
下面的块有效,但问题是页面内的 js/css/images url 也被重写了。因此该页面会查找 www.mydomain.com/qa/213/who-am-i/jquery.js 之类的文件,但实际上并不存在。因此页面加载,但是 css、.js 和图像的 none 工作。
<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}&{QUERY_STRING}" appendQueryString="false" />
</rule>
请告诉我如何解决这个问题。我正在使用 Asp.Net MVC(如果重要的话)。
几个小时和几天后,我终于找到了正确的 IIS 重写规则,用于绕过 images/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>
我在带有 IIS + Asp.Net MVC 的 Windows 系统上对 Question2Answer Question Answer PHP based solution similar to Whosebug. I have installed Question2Answer 使用上述规则和以下 2 条规则。
<!--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}&{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}&{QUERY_STRING}" appendQueryString="false" />
</rule>
仅设置以上规则是不够的。最重要的是在 Question2Answer 中设置你的基础 url。我几乎放弃了,认为当它安装在 Windows (IIS + Asp.Net MVC) 上时,不可能在 Question2Answer 中有非常 SEO 友好的 urls,直到我发现这个设置。感谢 Question2Answer 开发人员:)
转到 Admin/Layout 并设置基数 url,如下所示:
现在您已全部设置为 运行 Question2Answer 以及 IIS Asp.Net MVC。
我正在尝试重写 url 以使它们对搜索引擎友好
www.mydomain.com/qa/213/who-am-i
重写为
www.mydomain.com/qa/?qa=213/我是谁
下面的块有效,但问题是页面内的 js/css/images url 也被重写了。因此该页面会查找 www.mydomain.com/qa/213/who-am-i/jquery.js 之类的文件,但实际上并不存在。因此页面加载,但是 css、.js 和图像的 none 工作。
<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}&{QUERY_STRING}" appendQueryString="false" />
</rule>
请告诉我如何解决这个问题。我正在使用 Asp.Net MVC(如果重要的话)。
几个小时和几天后,我终于找到了正确的 IIS 重写规则,用于绕过 images/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>
我在带有 IIS + Asp.Net MVC 的 Windows 系统上对 Question2Answer Question Answer PHP based solution similar to Whosebug. I have installed Question2Answer 使用上述规则和以下 2 条规则。
<!--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}&{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}&{QUERY_STRING}" appendQueryString="false" />
</rule>
仅设置以上规则是不够的。最重要的是在 Question2Answer 中设置你的基础 url。我几乎放弃了,认为当它安装在 Windows (IIS + Asp.Net MVC) 上时,不可能在 Question2Answer 中有非常 SEO 友好的 urls,直到我发现这个设置。感谢 Question2Answer 开发人员:)
转到 Admin/Layout 并设置基数 url,如下所示:
现在您已全部设置为 运行 Question2Answer 以及 IIS Asp.Net MVC。