Тут есть несколько проблем...
В каталоге .htaccess контекст, URL-путь, соответствующий Правило перезаписи шаблон никогда не начинается с косой черты, поэтому регулярное выражение ^/(.*):(.*) никогда не будет совпадать, и директива ничего не делает. Итак Правило перезаписи шаблон нужно было бы ^(.*):(.*) - без префикса косой черты.
- Однако это регулярное выражение очень генеральный и, скорее всего, слишком много совпадает. Если вы ожидаете запрос формы
/1:1, т.е. /<число>:<число> затем используйте более конкретное регулярное выражение, например. ^\д+:\д+$
Поскольку вы получаете 403 Forbidden (в отличие от 404 Not Found), я предполагаю, что вы находитесь на сервере Windows. "проблема" здесь в том, что : (двоеточия) не являются допустимыми символами в именах файлов Windows. Это проблема с .htaccess потому что запрос сопоставляется с файловой системой до .htaccess (и mod_rewrite) обрабатывается — в этот момент срабатывает ошибка 403. Вместо этого вам нужно будет переписать запрос в конфигурации основного сервера (или в контейнере VirtualHost), что происходит перед запрос сопоставляется с файловой системой.
Итак, что вы пытаетесь сделать... перепишите запрос, содержащий двоеточие, используя .htaccess на сервере Windows невозможно. Вы можете сделать это в Linux (который разрешает двоеточие в именах файлов) ИЛИ в конфигурации основного сервера (сервер или же виртуальный хост контекст) в Windows, но не в .htaccess.
При использовании mod_rewrite в сервер (или же виртуальный хост) контекст (в отличие от .htaccess) ты делать нужен префикс косой черты (на обоих шаблон и замена струны). Например:
# В контексте "сервер" (или "виртуальный хост")
# не ".htaccess" (или раздел "<Directory>" в конфигурации сервера)
RewriteEngine включен
# Внутренне переписать "/1:1" в информацию о пути на "index.php"
Правило перезаписи ^/\d+:\d+$ /index.php$0 [L]
$0 обратная ссылка содержит полный URL-путь, захваченный Правило перезаписи шаблон. Сюда входит префикс косой черты (при использовании в сервер контекст), поэтому косая черта опущена в замена нить.
ОБНОВИТЬ:
Я внес изменения, пожалуйста, посмотрите на мой вопрос еще раз и убедитесь, что я ввел его правильно.
<VirtualHost *:80>
ServerName localhost
ServerAlias localhost
DocumentRoot "${INSTALL_DIR}/www"
<Directory "${INSTALL_DIR}/www/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
Кажется, вы не внесли никаких изменений; хоть не в том разделе? Как упоминалось выше, эти директивы должны быть добавлены непосредственно в <VirtualHost> контейнер (который вы разместили). Их нельзя добавить в .htaccess файл в ОС Windows - они просто ничего не сделают, и вы получите ответ 403 Forbidden, как указано.
Сказанное выше должно быть написано так:
<VirtualHost *:80>
ServerName localhost
ServerAlias localhost
DocumentRoot "${INSTALL_DIR}/www"
# Enable the rewrite engine in a virtualhost context
RewriteEngine On
# Internally rewrite "/1:1" to path-info on "index.php"
RewriteRule ^/\d+:\d+$ /index.php$0 [L]
<Directory "${INSTALL_DIR}/www/">
Options -Indexes -Includes +FollowSymLinks -MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
Вам нужно будет перезапустить Apache, чтобы эти изменения вступили в силу. (В отличие .htaccess файлы, которые интерпретируются во время выполнения.)
Однако какие еще директивы у вас есть в .htaccess и как маршрутизируются другие ваши URL-адреса? Вы разместили следующую директиву в комментариях:
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Это направляет URL-адрес совершенно иначе, чем то, что вы запрашиваете в своем вопросе. В своем вопросе вы передаете URL-путь в качестве дополнительной информации о пути к index.php. Однако в этой директиве вы передаете URL-адрес как часть строки запроса? Как это соотносится? Почему они разные? Очевидно, вам нужно передать URL-адрес так, как ожидает ваше «приложение MVC».