Механизм такого поведения называется переписывание URL и может быть реализован в Apache с модулями mod_rewrite
и в IIS с либо Helicons ISAPI_Rewrite Lite (или одна из несвободных альтернатив, предлагаемых Helicon) для IIS 5.1 и 6 или с Модуль перезаписи URL-адреса Microsoft для IIS 7 .
Например, следующие настройки гарантируют, что каждый запрос, который не может быть сопоставлен с существующим файлом или каталогом, будет передан в файл index.php
.
mod_rewrite
(.htaccess
в корневом каталоге вашего документа или где-то в вашем httpd.conf
)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR] // IF is file (with size > 0)
RewriteCond %{REQUEST_FILENAME} -l [OR] // OR is symbolic link
RewriteCond %{REQUEST_FILENAME} -d // OR is directory
RewriteRule ^.*$ - [NC,L] // DO NOTHING
RewriteRule ^.*$ index.php [NC,L] // TRANSFER TO index.php
ISAPI_Rewrite Lite (в соответствующем диалоге настроек IIS)
// uses same syntax as mod_rewrite
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Модуль перезаписи URL-адресов Microsoft (в вашем web.config
в корневом каталоге документа или в другом месте дерева конфигурации)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="MatchExistingFiles" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" pattern="" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="RemapMVC" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAll" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>