我公司的网站有一个目录http://website.net/files其中包含公司一半人使用的模糊数据。它不符合我们新的网站结构,我想将其移动到具有 DNS 的新服务器http://files.website.net。我遇到的问题是,许多用户仍然会有类似这样的链接http://website.net/file/app.exe
有人告诉我 URL 重写是强制重定向并保持查询的最佳选择,但我似乎忽略了一些东西。任何帮助都将不胜感激。
网页配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="wordpress" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
<rule name="files" stopProcessing="true">
<match url="^files/(.*)" ignoreCase="true" />
<action type="Redirect" url="http://downloads.openeye.net/files/{R:1}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/index.php?error=404" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
</configuration>
答案1
您的屏幕截图中存在多个问题:
模式字段中的正则表达式模式只会匹配 URL 中最后一个斜杠后的数字。“files/subdir/1234”将匹配。“files/subdir/app.exe”将不匹配。您需要
^files/([_0-9a-z-]+)/(.*)
在模式字段中。或者,如果您需要的只是带有 /files 的任何内容,您可以使用^files/(.*)
。测试模式功能是您的好朋友。我会检查忽略大小写,但这取决于您的具体情况。
操作类型应为“重定向”
假设您正在使用
^files/(.*)
正则表达式模式,则重定向 URL 应该是:http://downloads.openeye.net/files/{R:1}
这意味着进入http://yourdomain.com/files/whatever.exe将被重定向到http://downloads.openeye.net/files/whatever.exe
或者如果他们有更长的 URL,例如http://yourdomain.com/files/dir1/dir2/whatever.exe,它仍将被添加到新 URL 的末尾(http://downloads.openeye.net/files/dir1/dir2/whatever.exe)。