将IIS重写规则转换为Apache重写规则时遇到问题
问题描述:
我无法将IIS重写规则转换为Apache。将IIS重写规则转换为Apache重写规则时遇到问题
规则的目的是将domain.com/c/name/
重定向到domain.com/?company=name
。 它也应该将domain.com/c/name/?page=me
重定向到domain.com/?page=me&company=name
。
这是原来的IIS web.config文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="multi-company management" enabled="true">
<match url="^c/(.+?)/(.*)" />
<action type="Rewrite" url="{R:2}?company={R:1}" logRewrittenUrl="false" />
</rule>
</rules>
</rewrite>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Rewrite" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="200-399" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>
我想出了Apache网址提供了错误ERR_TOO_MANY_REDIRECTS
,是以下几点:
RewriteEngine on
RewriteRule ^c/(.+?)/(.*)$ /$2?company=$1
我觉得我快在那里但是缺少一些东西来避免重定向。我认为该规则在每个请求中都会保持匹配。任何帮助将不胜感激。
答
我找到了一个工作解决方案。
RewriteEngine on
#Rewrite JS, CSS and Images
RewriteCond %{REQUEST_URI} (.css|.js|.css.php|.png|.jpg|.jpeg|.gif)$
RewriteRule ^c/(.+?)/(.*) /$2 [L]
#Rewrite php pages (adding company as request param)
RewriteCond %{REQUEST_URI} (.php|/)$
RewriteRule ^c/(.+?)/(.*)$ /$2?company=$1 [QSA]
有可能有更好的方法,但这似乎工作到目前为止。