2014-01-19 3 views
0

Я борюсь с этим в течение нескольких дней.Переписать sometext/to sometext/sometext.php, запретить прямой доступ к sometext.php

структура папок:

индекс/файлы/страницы/

В основной папке (индекс) существует index.php - это единственный файл index.php в целой странице. В папке с файлами есть php-файлы, которые на самом деле являются страницами веб-сайта. В папке с файлами есть еще несколько папок (страниц), на которых хранятся разные страницы. Я просто сгруппировал php-фиксы в папки, чтобы поддерживать порядок.

Я пытаюсь достичь этого.

  1. Когда я ввожу URL как индекса/файлы/страницы/somename.php - Я хочу, чтобы получить 404 или что-то
  2. Когда я ввожу URL как индекса/файлы/SomeName - это получает переписаны индекс/файлы/страницы/somename.php, но адрес выглядит чистым.

Теперь, что бы я ни делал, я не могу заставить оба правила работать, либо один перезаписывает другое, либо ничего не работает, я все время получаю 500.

Вот мое правило, что на самом деле работает:

RewriteRule ^([-0-9a-z]+)$ pages/$1.php - это сценарий 2 и его ок.

Теперь, когда я добавляю правило, которое обрабатывает прямой доступ к php-файлам, предыдущее правило также затрагивается и перезаписывается, а все выдает 404, 500 и т. Д. Флаги, такие как [L] и т. Д., Не имеют никакого эффекта, изменяя порядок также ничего не делает.

Кроме того, я хочу, чтобы запретить прямой доступ к index.php и перенаправить в папку индекса (и показать чистый URL)

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

RewriteCond %{REQUEST_URI} ^.*\/pages\/.*\.php$ 
RewriteRule ^(.+)$ [R=404,L] 

RewriteRule ^([-0-9a-z]+)$ pages/$1.php 

RewriteCond %{REQUEST_URI} ^(.+)\/index\.php 
RewriteRule ^(.*)$ index/ [R=301,L] 

RewriteCond %{REQUEST_URI} ^\/(.*)\.php 
RewriteRule ^(.*)$ [R=404,L] 

Thankx и рассматривает

ответ

0

Попробуйте эти правила:

RewriteCond %{THE_REQUEST} /index\.php [NC] 
RewriteRule ^(.*?)index\.php$ index/ [L,R=302,NC,NE] 

RewriteCond %{THE_REQUEST} \.php[\s?/] [NC] 
RewriteRule^[F] 

RewriteRule ^index/?$ index.php [L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 
+0

не работает - index.php перенаправляется в папку индекса - TAHT нормально. Я все еще могу получить php страницы (index/fiels/pages/somename.php, но получить 404 при присоединении страницы через чистый URL-адрес, то есть: index/files/somename - не работает – Mac

+0

Попробуйте обновить код сейчас. – anubhava

+1

. он Вот конечный набор правил:.. (. *).. (. *). RewriteCond% {THE_REQUEST} */*/PHP [NC] RewriteRule^*/PHP $ [L, R = 404, NC, NE] RewriteRule^- (. +) ([0-9a-г] *) $ страниц/$ 1.php [L] RewriteCond% {REQUEST_URI} ^/index.php RewriteRule^(. *) $ mypage/[R = 301, L] thanx для ответов, это как-то привело меня к этому. – Mac

Смежные вопросы