Перейти к содержимому

Фотография
- - - - -

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


  • Вы не можете создать новую тему
  • Закрытая тема Тема закрыта
Сообщений в теме: 2

#1 irushan

irushan

    Прохожий

    Топикстартер
  • Новичок
  • 0
    1 сообщ.

Отправлено 24 Март 2014 в 20:05

День добрый.

Существует сайт 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.: Могу прописать для каждой страницы и вручную ( не так уж много страниц). Самое главное чтобы запросы работали по вышенаписанному правилу.

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


  • 0

Спонсор

#2 FiRеFоX

FiRеFоX

    Завсегдатай

  • V.I.P.
  • 43
    739 сообщ.

Отправлено 29 Март 2014 в 03:33

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

Не тестил, но должно работать


  • 0

#3 mrlasking

mrlasking

    $_GET['rich'] or die('trying');

  • Участник
  • 161
    323 сообщ.

Отправлено 16 Апрель 2014 в 02:30

FiRеFоX, лучше тести, ибо работать не будет)

 

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 разбираем получаемые параметры и, в зависимости от набора параметров, генерируем шаблон.

 

Если нужны более детальные объяснения или помощь на практике - мой скайп в профиле ;)


  • 0



Похожие темы Свернуть

Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей