htaccess: Однозначно определенные URL без .php

Статус
Закрыто для дальнейших ответов.

irushan

Новичок
Регистрация
24.03.2014
Сообщения
1
День добрый.

Существует сайт http://site.ru/
Он статичный, состоит из .php страниц.
Существуют страницы вида:

http://site.ru/index.php
http://site.ru/page1.php
http://site.ru/page1/page1.php
http://site.ru/page1/page2.php

Мне необходимо прописать правила htaccess, чтобы адреса определялись однозначно, то есть без использования окончания php. То есть вот так:

http://site.ru/ (главная страница)
http://site.ru/page1/ (адрес страницы первого уровня кончается слешем)
http://site.ru/page1/page1 (адрес страницы второго уровня кончается без слеша)
http://site.ru/page1/page2

А по запросу с окончанием .php чтобы либо вообще запрещались, либо редиректились на без .php.

P.S.: Могу прописать для каждой страницы и вручную ( не так уж много страниц). Самое главное чтобы запросы работали по вышенаписанному правилу.

Помогите разобраться, пожалуйста.
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
RewriteEngine on
RewriteRule (page1/page1)$ page1/page1.php [L,QSA]
RewriteRule (page1/page2)$ page1/page2.php [L,QSA]
RewriteRule (page1)/$ page1.php [L,QSA]
Прописывать, естественно, в файле .htaccess
Не тестил, но должно работать
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=FiRеFоX], лучше тести, ибо работать не будет)

[member=irushan], В подобных случаях, намного рациональнее использовать скрипт-конструктор, сейчас объясню почему.

В случае реализации вашей архитектуры, htaccess будет выглядеть следующим образом:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page1/$ page1.php [QSA]
RewriteRule ^page1/page1$ page1_page1.php [QSA]
...
RewriteRule ^pageX/pageX$ pagex_pageX.php [QSA]

Файлов же будет, соответственно, X+1, это как минимум. Если нужно сделать 10 страниц второго уровня, отдельных страниц придется делать 11 штук, учитывая страницу 1го уровня.

Плюсов такого архитектуры такого вида я не вижу ни одного, а вот минусов - вагон и маленькая тележка. Как минимум, подумайте, во что выльется необходимость изменить пару строк в структуре каждого файла.

Именно по этому, люди пришли к "конструкторам":

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w\-+]*)[\/]?([\w\-+]*)[\/]?$ constructor.php?page=$1&query_options=$2 [QSA]

Создайте, для теста, такой файл, с выводом передаваемых параметров, и посмотрите результаты. Простейший пример:

<?php
print_r($_REQUEST);
?>
Получим:

Запрос: http://sitename.ru/page & http://sitename.ru/page/
Результат: Array ( [page] => page [query_options] => )
/* --------------------------------------------- */
Запрос: http://sitename.ru/page/option & http://sitename.ru/page/option/
Результат: Array ( [page] => page [query_options] => option )
/* --------------------------------------------- */
Запрос: http://sitename.ru/other_page & http://sitename.ru/other_page/
Результат: Array ( [page] => other_page [query_options] => )
/* --------------------------------------------- */
Запрос: http://sitename.ru/other_page/other_option & http://sitename.ru/other_page/other_option/
Результат: Array ( [page] => other_page [query_options] => other_option )
Как видим, отпадает, вообще, какая либо необходимость в создании кучи файлов. Просто, в файле constructor.php разбираем получаемые параметры и, в зависимости от набора параметров, генерируем шаблон.

Если нужны более детальные объяснения или помощь на практике - мой скайп в профиле ;)
 
Статус
Закрыто для дальнейших ответов.
Верх Низ