правила mod_rewrite для существующих файлов - PullRequest
0 голосов
/ 10 декабря 2011

Я определяю правило mod_rewrite, которое переписывает все запросы в мой /application.php, если запрошенный файл не существует, и не будет переписывать в противном случае.Это просто:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule .* application.php [PT]

Есть только одна проблема с кодом.Предположим, у меня есть файл foo.html.Тогда запросы как:

http://example.com/foo.html/some/other/string

будут падать с ошибкой 404.Почему?

1 Ответ

0 голосов
/ 10 декабря 2011

упадет с ошибкой 404. Почему?

Потому что этот URL не существует. Он ищет файл string в папке /foo.html/some/other и его там нет.

Поведение, которое вы хотите использовать, используя структуру URL http://example.com/foo.html/some/other/string - обрабатывая первую запись как имя файла, а остальные как параметр - называется "pathinfo" . Он не имеет ничего общего с mod_rewrite, но будет доступен, если вы включите в своей конфигурации Apache следующее:

 AcceptPathInfo On

похоже, что эта настройка в данный момент отключена для вас.

Если вы включите его, часть после имени файла будет доступна для foo.html - в PHP она будет в

$_SERVER["PATH_INFO"]

переменная.

Поскольку этот метод не требует, чтобы модуль перезаписи был активным, его иногда называют «mod_rewrite» для бедного человека - он отлично работает, но не так гибок, как «реальное» переписывание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...