我使用IIS 8,只是学习重写,因为我从未写过任何有关SEO的内容。

我有以下假设URL正常工作的规则: /survey/abc123/email

<rule name="Survey Rule" stopProcessing="true">
    <match url="survey/([_0-9a-z-]+)/([_0-9a-z-]+)" />
    <action type="Rewrite" url="survey.htm?var1={R:1}&amp;var2={R:2}" />
</rule>

在Survey.htm页面上,我有用于检查var1和var2是否存在的代码,但是在此重写中,如果我具有url /survey/abc123 ,则显然不会达到Survey Rule。 我尝试了几个<conditions>但可以找到正确的<conditions>

我觉得一定有话要说

If {R:1} exists then var1={R:1} else var1=''

If {R:2} exists then var2={R:2} else var1=''

理想情况下是某种类型的if循环。 有没有办法做到这一点的重写,无论多少/有调查后,无论是0或10,它会永远是检验页?

我已经看过重写地图,但是不确定是否可以解决此问题。

编辑

我想重写的可能网址:

/survey/abc123/
/survey.htm?var1=abc123
/survey/abc123/email/
/survey.htm?var1=abc123&var2=email
/survey/abc123/email/bob/
/survey.htm?var1=abc123&var2=email&var3=bob
/survey/abc123/email/bob/someOtherVar
/survey.htm?var1=abc123&var2=email&var3=bob&var4=someOtherVar

/result/1/
/result.htm?var1=1
/result/1/test@example.com
/result.htm?var1=1&var2=test@example.com

我希望斜杠后的第一个项目是页面名称,然后将每个项目变成“ query_string”。 我希望这更有意义。

#1楼 票数:0 已采纳

简短答案

使用IIS重写就不能 完全拥有所需的功能。 根据what you want ,我的意思是用循环动态地处理它。

长答案

(1) 使用IIS重写,这是最解决您的问题的方法:

<rule name="Survey/Result Loop Rule" stopProcessing="true">
    <match url="^(survey|result)/([^/]+)/(.*)$" />
    <action type="Rewrite" url="/{R:1}/{R:3}?{R:2}={R:2}" appendQueryString="true" />
</rule>

<rule name="Survey/Result Default Rule" stopProcessing="true">
    <match url="^(survey|result)/$" />
    <action type="Rewrite" url="/{R:1}.htm" appendQueryString="true" />
</rule>

只要url包含/survey//result/参数作为子文件夹,它将模拟一个循环。 然后,最后将其改写为带有查询字符串的.htm页面。 这不可能通过增加数字来动态生成查询名称,例如var1 var2等(至少,如果存在解决方案,这将非常棘手且繁琐,因为没有为此编写重写引擎)。 在此示例中,查询名称和值都相同,例如?abc123=abc123&email=email

(2)最干净的方法是将作业委派给脚本:

<rule name="Survey/Result Default Rule" stopProcessing="true">
    <match url="^(survey|result)/(.*)$" />
    <action type="Rewrite" url="/{R:1}.htm?params={R:2}" />
</rule>

例如,该规则将/survey/XXX/YYY/ZZZ/重写为/survey.htm?params=XXX/YYY/ZZZ/ 由于作业是委派给脚本的,因此您的htm文件需要实现以下内容(以伪代码):

params = query_get('params');
// remove trailing slash in params if present

parameters = explode("/", query_get('params'))

for (i = 0; i < count(parameters); i++)
    var{i+1} = parameters[i]

// var1 = parameters[0]
// var2 = parameters[1]
// var3 = parameters[2]
// and so on...

我想你应该已经明白了。

  ask by Lance translate from so

未解决问题?本站智能推荐:

2回复

未考虑 IIS 重写模块 web.config 重写规则更新

我想在我的 Web 项目中更改重定向。 但是,当我更改 web.config 文件中的重写规则时,不会考虑更新,并且我仍然得到旧的 url 目标。 我尝试清理项目,但徒劳无功。 我认为在某个地方缓存了我的 web.config 版本,我不知道如何找到它并覆盖它。
1回复

URL 将子域根目录下的所有文件夹重写为不同文件路径中的文件夹

我需要从sub.domain.com/Xfolder/yfile.htm --> /local_path/all_customers/xfolder/yfile.htm重写 all_customers 文件夹中有很多 xfolders。 sub.domain.com 的 IIS 根目录中不
1回复

将web.config URL重写规则转换为.htaccess

我在web.config具有以下IIS URL重写规则: <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite>
2回复

如何在Godaddy Windows托管计划的web.config文件中创建.htaccess重写规则

我较新使用web.config。 我在本地主机上创建了.htaccess文件,但由于Windows托管计划,它无法在Godaddy托管上运行。 我不知道如何在web.config文件中创建重写规则。 我的.htaccess重写规则如下。 请帮我。 谢谢
1回复

IIS URL重写规则-查询字符串问题

我在web.config文件中配置了以下URL重写规则: 以下源URL符合预期: 但是,查询字符串参数“ item”在重写的URL中重复,即结果查询字符串为“ item = 1&item = 1”。 我不知道为什么要复制它。 有任何想法吗? 谢谢
1回复

使用URL重写规则时,IIS查询字符串丢失

我正在尝试让一个网站使用其他URL,基本上一个是真实URL(fakesite.com),另一个是品牌URL(NewFakeSite.com)。 到目前为止,香港专业教育学院设法使其工作: http://fakesite.com/uv/ExpressBranding/ExpressHome
2回复

带有查询字符串的 IIS web.config 重写/重定向规则

我正在尝试在web.config文件上设置重写/重定向规则。 我几乎没有使用 IIS 服务器的经验,所以我一直在网上,在 StackOverflow 和其他论坛上查看解决方案,并且已经尝试了很多没有成功。 我必须指出,我只能通过 FTP 访问服务器,所以我不能确定它是如何设置的(以防服务器设置对此
1回复

IIS URL重写带有可选参数,用于页面编号

我需要帮助为以下网址格式编写重写规则 第一个参数将是“买家”或“供应商”或“全部” 第二个参数可以是ANY位置名称 '/ page / number'部分是可选的 网址将始终以“ .html”结尾 更新: 我设法编写了一个成功匹配以下URL的重写