Преобразовать файл web.config в файл .htaccess - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть файл web.config, который я пытался преобразовать в .htaccess, и он не работает должным образом. Мне бы очень хотелось узнать, где я ошибся.

web.config

<rewrite>
        <rules>
            <rule name="Redirect to https">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
            </rule>

            <rule name="Blocker" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{PATH_INFO}" pattern="^/version_" />
                </conditions>
                <action type="Redirect" url="https://www.example.com/404/" redirectType="Permanent" appendQueryString="false" />
            </rule>

            <rule name="API Director">
                <match url="(.*)" />
                <conditions>
                    <add input="{PATH_INFO}" pattern="^/api/v1/" />
                </conditions>
                <action type="Rewrite" url="/controller.php" />
            </rule>

            <rule name="HoverCart App" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <!--<add input="{HTTP_HOST}" pattern="^(.*)(quiverstest.)" />-->
                    <add input="{PATH_INFO}" pattern="^/newrelic/" negate="true" />
                </conditions>
                <action type="Rewrite" url="\app\{R:0}" />
            </rule>

        </rules>
    </rewrite>

.htaccess

RewriteRule (.*)    https://{HTTP_HOST}{REQUEST_URI}

RewriteCond %{PATH_INFO} ^/version_
RewriteRule (.*)    https://www.example.com/404/

RewriteCond %{PATH_INFO} ^/api/v1/
RewriteRule (.*)    /controller.php

RewriteCond %{PATH_INFO} ^/newrelic/
RewriteRule .*    \app\$0

определенно / api / v1 не работает. Я получаю 404, когда его пытаются вытащить https://localhost/api/v1/app/

Если честно, я не очень разбираюсь ни в web.config, ни в .htaccess, я пытаюсь настроить на Mac что-то, что изначально было сделано для машин с Windows.

EDIT

самое важное правило, которое мне нужно переписать, это

<rule name="API Director">
   <match url="(.*)" />
   <conditions>
     <add input="{PATH_INFO}" pattern="^/api/v1/" />
   </conditions>
   <action type="Rewrite" url="/controller.php" />
 </rule>

это ошибка, которую я получаю

The requested URL /api/v1/app/ was not found on this server.
Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.

1 Ответ

0 голосов
/ 12 ноября 2018

Это довольно грубый автоперевод, который вы там получили.

  • Правила регулярных выражений редко должны входить в RewriteConds:

    RewriteCond %{PATH_INFO} ^/api/v1/
    RewriteRule (.*)    /controller.php
    

    Каждый должен быть просто:

    RewriteRule ^api/v1/    /controller.php
    

    Начальный / должен быть опущен (из любого ^/…).

  • Для ссылок на среду необходимо % в контексте Apache:

    RewriteRule (.*)    https://%{HTTP_HOST}%{REQUEST_URI}
                                ↑           ↑
    

    В частности, этому RewriteCond нужен только для http: // запросы.

  • Уверен, это должны быть косые черты:

    RewriteRule .*    \app\$0
                      ↑   ↑
    
  • Сохранить комментарии из оригинального web.config

...