Я перевожу небольшое PHP-приложение в веб-приложение Microsoft Azure.
Я знаю, что есть много схожих вопросов о стековом потоке, но я не могу понять это самостоятельно.
Предыдущий у меня был этот файл .htaccess в одном подкаталоге:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>
Теперь у меня есть этот файл web.config, я сгенерировал его с помощью онлайн-инструмента и немного изменил его.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1J" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<action type="Rewrite" url="/api.php?rquest={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 2J" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<action type="Rewrite" url="/api.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
Теперь я не получаю ошибку 404 при попытке получить доступ к странице. Похоже, web.config не работает вообще.
Может кто-нибудь сказать мне, что не так с моим файлом?
Есть небольшая ошибка регулярного выражения.
Это мой каталог тестовых проектов:
И вот мой тест web.config
:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1J" stopProcessing="true">
<match url="^(.*)$" ignoreCase="true" />
<action type="Rewrite" url="/api.php?request={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 2J" stopProcessing="true">
<match url="^(.*)$" ignoreCase="true" />
<action type="Rewrite" url="/api.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Результатом является то, что при посещении <web_app_name>.azurewebsites.net
, это соответствует 2-му правилу и переписать в <web_app_name>.azurewebsites.net/api.php
,
И при посещении <web_app_name>.azurewebsites.net/example
, это соответствует 1-му правилу и переписать в <web_app_name>.azurewebsites.net/app.php?request=example
Других решений пока нет …