Как написать правило перезаписи URL-адреса для чистых URL-адресов для IIS

Я использую Typo3 на сервере 2012R2 и IIS. На этом же сервере также установлен обмен. Typo3 теперь создает чистые URL-адреса, но эти URL-адреса всегда создают ошибку 404. Я нашел решение этой проблемы с

<system.webServer>
    <defaultDocument>
        <files>
            <add value="index.php" />
        </files>
    </defaultDocument>
    <rewrite>
        <rules>
            <rule name="SpeakingURL" enabled="false">
                <match url="(^(typo3|fileadmin|typo3temp|uploads)/|\.(php|js|css|jpg|png|gif|pdf)$)" negate="true" />
                <action type="Rewrite" url="index.php" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

но чем обмен, больше не работает правильно. Поэтому мне нужно искать решение, которое обнаруживает только чистые URL-адреса.

Пример: http; // www.myDomain.com/customers/name/location Этот URL-адрес я должен отправить на index.php.

В URL-адресе нет строки запроса, а также нет точки или какого-либо расширения в пути. Как я могу создать правило для перезаписи URL-адресов IIS, чтобы входящие чистые URL-адреса передавались в index.php?


person HGA    schedule 12.05.2019    source источник
comment
Поскольку у вас есть несколько приложений на одном сервере IIS, убедитесь, что вы анализируете разные шаблоны URL-адресов, чтобы можно было использовать разные правила с регулярными выражениями для их различения. URL Rewrite также поддерживает условия (например, заголовок Host), которые могут упростить определенные случаи. Слишком широко, чтобы обсуждать без более конкретного сценария.   -  person Lex Li    schedule 12.05.2019


Ответы (2)


Ваша проблема - два типа виртуальных URL-адресов.

Я мало что знаю об обмене, но знаю TYPO3.

В TYPO3 у вас есть несколько реальных папок для файлов, таких как изображения, CSS, JS, и весь HTML является виртуальным. Хотя у вас есть точные пути к файлам, только ваш виртуальный контент отвечает за пути к HTML (виртуальным страницам). Это затрудняет создание правил исправления для перезаписи.
В обычных установках TYPO3 у вас есть только эти реальные файлы, а все остальное является виртуальным и обрабатывается /index.php. Но это допустимо, только если вы используете TYPO3 9 или расширение realurl (или старый simulatestatic). в противном случае TYPO3 использует только index.php и обрабатывает остальное в параметре URL (например, ?id=124&L=2&type=98)

Решение:
отключите realurl (минус: нет красивых URL-адресов)
или используйте расширение staticfilecache, которое экспортирует все CMS-страницы как реальные файлы, поэтому перезапись не требуется (минус: отсутствие «динамического» содержимого).

person Bernd Wilke πφ    schedule 13.05.2019

Кажется, я нашел решение своей проблемы. До сих пор у меня все работает нормально. Я добавил приведенный ниже код в раздел system.webServer файла web.config в разделе wwwroot.

   <defaultDocument>
        <files>
            <add value="index.php" />
        </files>
    </defaultDocument>
    <rewrite>
        <rules>
            <clear />
            <rule name="Clean URL" enabled="true">
                <match url="(.*)" />
                <action type="Rewrite" url="index.php" />
                <conditions>
                   <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                   <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
               </conditions>
           </rule>
        </rules>
    </rewrite>

Это для Typo3 9,5+

person HGA    schedule 14.05.2019