PHP « ЧПУ без htaccess

Доброе время суток,

При разработке очередного проекта вопрос встал боком: можно ли реализовать ЧПУ без htaccess, что ведёт за собой подключение mod_rewrite, и без папок, которые делаются как всевдо ЧПУ и в которых хранятся файлы.

Большое спасибо за ответы!

1 ответов


Странно, а про nginx никтон е упомянул. В нем все шоколадно - вписывается правило с ревраятом на индекс и все.


Просто обрабатываете URL каким-либо фронтконтроллером и подключаете нужные контроллеры/экшнеы


Без .htaccess сделать ЧПУ (в классическом понимании этого слова) нельзя. Не, ну можно все через конфиг сервера настроить, но вопрос тогда становится бессмысленным.

Если вопрос поставить как "можно ли ЧПУ без mod_rewrite", то ответ положительный. Можно.
1. 404 Выше было уже сказано.
2. Директива ForceType application/x-httpd-php
Переименовываешь php файл в "index" без расширения, и говоришь директивой

<Files ~ "^([^.]+)$">
  ForceType application/x-httpd-php
</Files>
Обрабатывать такие файлы как php.

Все эти не nod_rewrite способы реально - из прошлого века.

ЧПУ - это для человека. Так уж сложилось что нам понятнее использовать синтаксис пути из файловой системы. Тем более, что изначально URL именно это и подразумевает - путь к файлу. И даже если мы пишем путь к папке, веб-серверы все равно дополняют его до указанного в настройках index.html или чего-нибудь подобного.

Естественные ЧПУ - это действительно значит что все лежит в четкой и понятной структуре папок. Но когда речь заходит о сложных скриптах, которые принимают на вход параметр влияющие на отображение, то превратить их в удобочитаемые можно только костылями!

По сути - mod_rewrite - это тоже костыль - который правда очень хорошо отлажен и встроен как модуль в apache.

Поэтому варианта у вас два:

  • Либо писать программный код который на полном автомате воссоздает полную структура папок и файлов, которые скорее все одинаково передают последующее управление одному и тому же скрипту.
  • Либо подбирать подходящий костыль. Костыль в данном случае должен переводить с указанного пути на управляющий скрипт. В apache это может быть mod_rewrite или ErrorDocument 404. Хотя mod_rewrite специально для этого и создавался.

Или как вариант формировать ссылки вида http://site.com/index.php/article/sample


Можно использовать в .htaccess

ErrorDocument 404 /index.php

а в самом скрипте нужно отдать нужный заголовок:
<?php
header("Status: 200 Ok");