0

我无法将 IIS 重写规则转换为 Apache。

该规则的目的是重定向domain.com/c/name/domain.com/?company=name. 它还应该重定向domain.com/c/name/?page=medomain.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 url 给出了错误ERR_TOO_MANY_REDIRECTS,如下所示:

RewriteEngine on
RewriteRule ^c/(.+?)/(.*)$ /$2?company=$1

我想我快到了,但缺少一些东西来避免继续重定向。我认为该规则在每个请求上都保持匹配。任何帮助将不胜感激。

4

1 回答 1

0

我找到了一个可行的解决方案。

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]

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

于 2012-07-12T10:24:29.313 回答