我正在尝试重写和重定向此网址:
https://www.domain.com/video-lessons-page.php?item=stocks
转到此网址:
https://www.domain.com/stocks-video-lessons
以下是我目前正在使用的代码:
RewriteCond %{QUERY_STRING} ^item=([^&]+)
RewriteRule ^/?video-lessons-page\.php$ https://www.domain.com/%1-video-lessons? [R=301,L]
RewriteRule ^(stocks|finance|accounting)-video-lessons$ video-lessons-page.php?item=$1 [NC,L]
不幸的是,上面的代码我遇到了问题。前两行非常有效,因为它会将/video-lessons-page.php?item=stocks
重定向到/stocks-video-lessons
。
第三行也可以很好地适用于/stocks-video-lessons
URL与GET变量和页面代码正确运行的位置。
但将它们放在一起是有问题的。现在我收到错误,例如" www.domain.com重定向了你太多次了。"等任何想法?
答案 0 :(得分:1)
只是澄清一下,可能您已将所有内部网址更改为/stocks-video-lessons
格式,并且外部重定向的原因是因为“丑陋”的网址已被编入索引,外部联系?
正如您所发现的那样,您正在获得重定向循环,因为这两个规则发生冲突,并且它不断地从一个规则重定向/重写到另一个规则。
当只有初始请求包含URL /video-lessons-page.php
时,您需要重定向,而不是重写的URL(这是此处发生的事情)。您可以通过检查THE_REQUEST
服务器变量(包含浏览器发送的完整HTTP请求)来检查初始请求。
如下所示:
RewriteCond %{THE_REQUEST} /video-lessons-page\.php?item=(\w+)
RewriteRule ^video-lessons-page\.php$ https://www.example.com/%1-video-lessons? [R=301,L]
RewriteRule ^(stocks|finance|accounting)-video-lessons$ video-lessons-page.php?item=$1 [L]
请注意,您必须在测试前清除浏览器缓存,因为浏览器会缓存301(永久)重定向。 (通常更容易使用302重定向进行测试。)如果您明确需要不区分大小写的匹配,则只使用NC
标记。
更新:我已将查询字符串参数值的正则表达式从([^&]+
)更改为稍微限制一些(\w+
)。 \w
是单词字符的速记字符类(自然排除&
和关键空格)。由于THE_REQUEST
包含以下形式的字符串:
GET /video-lessons-page.php?item=stocks HTTP/1.1
...我们需要在空间之前停止捕获。先前的模式([^&]+)
将捕获到字符串末尾的所有内容,即。 “股票HTTP / 1.1”。所以,我会期望 404,因为会发生无效的重定向,但内部重写会失败。 (?)
答案 1 :(得分:0)
感谢w3dk的指导,我明白了,除了using Microsoft.Exchange.WebServices.Data;
string EmailAddress = ConfigurationManager.AppSettings["EmailAddress"];
string DomainUser= ConfigurationManager.AppSettings["SIGNUM"];
string DomainPass= ConfigurationManager.AppSettings["SIGNUMPassword"];
string NetworkDomain = ConfigurationManager.AppSettings["NetworkDomain"];
ExchangeService exchange = new ExchangeService(ExchangeVersion.Exchange2010);
exchange.Credentials = new WebCredentials(DomainUser, DomainPass, NetworkDomain);
exchange.Url = new Uri("https://oa-am.msg.xxxxxxx.com/EWS/Exchange.asmx");
之外,只需要QUERY_STRING
留下来。
最终代码:
THE_REQUEST