将IIS重写规则转换为Apache重写规则时遇到问题

将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] 

有可能有更好的方法,但这似乎工作到目前为止。