#apache #mod-rewrite #url-rewriting
#apache #mod-перезапись #url-перезапись
Вопрос:
У меня есть правило mod_rewrite, подобное этому:
RewriteRule ^(alice)/?$ bob.php?page=$1 [L]
Если я перейду к http://localhost/alice /, оно гласит bob.php (как и ожидалось). Если я перейду к http://localhost/alice (без косой черты в конце), оно гласит bob.php (опять же, как и ожидалось).
Если я создам каталог в htdocs под названием «alice» и перейду к http://localhost/alice /, оно гласит bob.php. Но, если я перейду к http://localhost/alice теперь оно перенаправляет на http://localhost/alice/?page=alice . Оно по-прежнему читает bob.php (это то, что я хочу), но я бы предпочел, чтобы это не изменяло URL таким образом.
Почему это происходит, и есть ли какой-либо способ предотвратить это (кроме того, что просто нет таких каталогов, которые лежат)?
Комментарии:
1. @QuantumMechanic: Я рассматривал возможность публикации этого там в первую очередь, но у SO 3716 вопросов с тегом mod-rewrite, а у SF только 578. Конечно, популярность не делает что-то правильным, но, по моему опыту, правила перезаписи — это вопрос к программистам, а не к системным администраторам.
Ответ №1:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(alice)/?$ bob.php?page=$1 [L]
Комментарии:
1. спасибо за ваш ответ. Однако я действительно хочу, чтобы localhost / alice отображал bob.php я просто не хочу, чтобы оно изменяло URL. Я отредактировал свой вопрос, чтобы прояснить это.
Ответ №2:
Похоже, это вызвано /? в конце — удаление ? причины (при существовании каталога alice):
- /alice перенаправляется в /alice/ и отображается как /bob.php?страница=alice
- /alice/ для отображения как /bob.php?страница=alice
Если каталог alice не существует, /alice не будет перенаправлен (но /alice/ будет). Если вы знаете, существует ли каталог или нет, вы можете выбрать, использовать ли / или /? .