Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Запрет доступа к странице в htaccess

Запрет доступа к странице в htaccess


     28.11.2012    htaccess    Все вопросы » Общие вопросы    4711

вопрос
День добрый. Возникла необходимость сделать следующуу:
Есть сайт, необходимо запретить доступ ко всем страницам, в урле которых нет слеша (кроме первого после домена), например, site.ru/data - сюда запретить, site.ru/data/1.php - сюда разрешить.

Как это можно сделать? Подозреваю, что при помощи конструкции
<Files ~ "регулярное выражение">
      Deny from all
</Files>
Однако в регулярных выражениях я не силен, поэтому прошу помощи. Спасибо

Ответил: Sander


Открываешь .htaccess и перелопачиваешь все строки :)
Например первая строка со слешем:
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 [L]

Тут код (/?)+, вопросительный знак означает что слеш может быть, а может и не быть, а плюсик то что указанное в скобках должно повторяться 1 и более раз. Оба варианта ведут на одну страницу.
Если везде убирать этот слеш, то надо убедиться, что нигде в движке не прописывается адрес со слешем в конце иначе будет много пустых (404) страниц.

4 комментария

OKyJIucT
Юзер

OKyJIucT - 28 ноября 2012 16:15 -

У меня не DLE движок, в тот то и проблема:) Но спасибо за ответ

Sander
PHP-developer

Sander - 28 ноября 2012 16:30 -

site.ru/data - сюда запретить, site.ru/data/1.php

data - это папка?

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

OKyJIucT
Юзер

OKyJIucT - 28 ноября 2012 16:34 -

нет, это одна из страниц (по типу статической в DLE). Но в ней нет других страниц,

site.ru/data - сюда запретить, site.ru/main/1.php


Вот такой вариант будет более корректным. Однако у меня нет полного перечня слов типа data - оно может быть любым, полный список известен только разработчикам (некоторые слова означают служебные адреса, и я хочу сделать их недоступными для выполнения).

Требуется запретить доступ (либо поставить редирект на главную или 404 страницу) со всех страниц, которые не имеют подстраниц (то есть в полном URL имеется только один слеш). Надеюсь понятно объяснил.

OKyJIucT
Юзер

OKyJIucT - 29 ноября 2012 14:50 -

Сделал редирект в PHP таким способом



$uri = preg_replace ('/([a-zA-Z0-9]|-|_|\.)+/', '', $_SERVER['REQUEST_URI']);

if ( strlen($uri) < 2 && strlen($_SERVER['REQUEST_URI']) > 1 ) {

    $code = header('Location: http://' . $_SERVER['HTTP_HOST']);
    
    $code .= header('HTTP/1.1 301 Moved Permanently');
    
    exit();
    
} else {

***основной код index.php***

}


Подскажите, есть какие нибудь недостатки этого способа? Спасибо

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх