Как разрешить 2 перезаписи URL в IIS 10, которые похожи? - PullRequest
0 голосов
/ 28 мая 2019

У нас было это старое правило в течение многих лет, которое принимает параметр URL, анализирует значение на стороне сервера и отображает последнюю страницу:

            <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                <match url="^([^/]+)/?$" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="cities.php?id={R:1}" />
            </rule>

Теперь у нас есть новое условие, когда мы хотим сделать что-то подобноено результаты и обработанный параметр URL-адреса должны работать по-разному.

           <rule name="RewriteUserFriendlyURL2" stopProcessing="true">
                <match url="^([^/]+)/?$" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="detail-page-friendly.php?name={R:1}" />
            </rule>

Первое правило принимает параметр и отображает страницу, используя этот параметр в качестве переменной.Второе правило принимает параметр и создает результат на основе записи базы данных.Каждый из них использует свою страницу PHP для создания конечной страницы.

Поскольку мы практически делаем одно и то же в каждом случае, необходимо выяснить, как разделить два правила.

Iрассматривал два разных триггера, таких как создание второго правила, связанного напрямую, например /pageName.php?name=something, который затем перезаписывает в / что-то и сначала устанавливает это правило с помощью "stopProcessing =" true "", чтобы не переходить кстарое правило, которое ищет просто слово (параметр) без имени страницы.Ссылка из второго случая была бы / cityName

Мысль заключается в том, что в одном случае мы ищем имя страницы (pageName.php), а затем перестаем смотреть на дальнейшие правила.Если это условие не выполняется, мы ожидаем, что второе правило выполнит свою работу, как это было в прошлом.

Возможно ли это (хорошая логика) или я должен рассмотреть какой-то другой метод?

1 Ответ

0 голосов
/ 29 мая 2019

Согласно вашему описанию, я предлагаю вам попробовать использовать условие перезаписи URL, чтобы выполнить ваше требование.

Если вы хотите переписать URL в соответствии с другой строкой запроса, я предлагаю вам использовать параметр {querystring} в своем правиле перезаписи URL.

Подробнее, вы можете обратиться к правилу переписывания URL ниже:

        <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
            <match url="^([^/]+)/?$" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                <add input="{QUERY_STRING}" pattern="name=first" />
            </conditions>
            <action type="Rewrite" url="cities.php?id={R:1}" />
        </rule>
       <rule name="RewriteUserFriendlyURL2" stopProcessing="true">
            <match url="^([^/]+)/?$" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
             <add input="{QUERY_STRING}" pattern="name=second" />
            </conditions>
            <action type="Rewrite" url="detail-page-friendly.php?name={R:1}" />
        </rule>
...