Ваше правило выводит относительный путь, и вы находитесь в контексте для каждого каталога. Вам нужно RewriteBase
. В контексте каждого каталога перезапись выполняется по расширенным путям файловой системы, а не по исходным URL-адресам. Но результаты расширения снова преобразуются в URL! RewriteBase
предоставляет префикс, необходимый для этого. Без этого URL наивно состоит из того же префикса файловой системы, который был удален перед заменой, и в результате вы получите, например, http://example.com/var/www/docroot/blah...
, что является бессмысленным. Либо RewriteBase
, либо выведите абсолют, начиная с косой черты.
Кроме того, вы должны закрепить матч:
RewriteRule ^monitor.html$ ...
В противном случае правило потенциально будет совпадать где-то в середине пути, и только эта совпадающая часть будет заменена заменой! Вы не хотите сопоставлять и переводить amonitor.htmly/foobar
, верно, и конвертировать только часть monitor.html
в материал index.php
.
Вы не должны избегать вопросительного знака в замене. Это не регулярное выражение! Просто index.php/?etc
, а не index.php/\?etc
(Может ли это быть обратная косая черта, которая порождает `index.php / monitor.html '?)