@akdes

Как пользоваться mod_rewrite? Как получить из url.com/foo.php -> url.com/foo?

Всем привет.
Последнее время постоянно натыкаюсь на странички, где используются не полные ссылки на файлы, на запросы GET (url.com/foo/userid/2 заместо url.com/foo.php?userid=2) и т.д.

Отсюда пару вопросов:
1. Кроме как для красоты, для чего это служит ещё?
2. Как это сделать?
3. Подводные камни?
4. После введения, меняется ли способ обработки данных в php? Пройдёт ли isset($_GET[..])? Или нужно к этому подходить уже по другому?

Заранее благодарен.
  • Вопрос задан
  • 2451 просмотр
Решения вопроса 1
socengel
@socengel
7 лет native php в продакшене, онлайн 20000+,
1. SEO, если ссылка содержит часть запроса, ражирование выше. Вспомните википедию и на каком она месте по результатам выдачи. собственно наглядный пример: ".рф/никнейм/фотоальбом/весна_2014" что еще более понятно.
Такая модель очень удобна для ООП. класс/метод/параметры + классам и методам можно задавать псевдонимы.
2. Mod_rewrite. Без мод rewrite - index.php/foo/bar/ работать будет (смотря какой обработчик запросов). Собственно реврайт и нужен чтобы убрать индекс пхп из строки запроса.
Нужно будет своими руками делать обработчик таких запросов. в качестве входящих данных будет всего одна строка $_SERVER['REQUEST_URI'] Которую нужно "Взорвать по слэшу" - explode( "/", $_SERVER['REQUEST_URI'] ); собственно массив на выходе и есть "новый $_GET". последствия думаю представите сами.
3. Можете забыть про $_GET. использование такой технологии равносильно unset($_GET) в первой строке индексного файла. (более подробно о $_GET я писал в этом вопросе - Post и Get запросы, какая между ними разница и что лучше и для каких целей? ).
Так же появляется зависимость от положения параметра в строке. вы будете использовать вместо строковых ключей массива номер в массиве например if ( isset( $exploded_uri['2'] ) && $exploded_uri['2'] = 'something' ) { }
4. думаю я уже ответил.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ShamblerR
Групируем
(url.com/foo)(.php)
возвращяем все кроме $1
$1 уходит в топку. помоему очевидно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы