Перезапись URL отключить открытие файлов

0

Надеюсь, я могу решить свой вопрос. У меня есть правило Rewrite. Он работает правильно, но если я набираю dot и расширение файла, он ищет каталог. Я хочу удалить это. В основном я хочу редактировать загруженные изображения на своем веб-сайте

Если вы не понимаете мой вопрос, я могу лучше объяснить его примерами.

У меня есть папки "/uploads/images/". Тогда у меня есть изображение внутри (например, test.jpg). Мой контроллер работает, открывая файл класса с 1-м параметром и ищет функцию с именем второго параметра. Поэтому, если я попытаюсь открыть

www.example.com/uploads/images

он попытается открыть class.uploads.php и запустить функцию, называемую образами. У меня также есть третий параметр - $ _GET ['s'], и мой класс выглядит так:

class uploads{
    public function images(){
        $img = Database::Map("s/string");
        $img = $img['s'];
        die($img);
    }
}

Я хочу, когда пользователь вводит www.example.com/uploads/images/test.jpg мою функцию, которая будет выполнена, а не открывать файл. Также я хочу только сделать это правило для папки uploads.

Это мое правило перезаписи.htaccess:

RewriteEngine on
RewriteBase /
RewriteRule ^([^/\.]+)?/?([^/\.]+)?/?([^/\.]+)?/?([^/\.]+)?/?$ index.php?act=$1&p=$2&s=$3&ss=$4&%{QUERY_STRING} [L]

И это мой передний контроллер:

...
$_GET["act"] = strtolower($_GET["act"]);
$Page = new $_GET["act"];
if($_GET['p'] == NULL && $_GET['act'] != NULL)$_GET['p'] = "index";
if(method_exists($Page,$_GET["p"]) == false)$Core->GoPage("/NotFound/");
if(method_exists($Page,"PreRun") == true)$Page->PreRun();
if(isset($_GET["s"]) == false)$Page->{$_GET["p"]}();
if(isset($_GET["s"]) == true)$Page->{$_GET["p"]}($_GET["s"]);
...
Теги:
image
mod-rewrite
url-rewriting

1 ответ

1

В папке uploads создайте файл .htaccess со следующим содержимым:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /class.uploads.php [L]
</IfModule>

Создайте файл с именем class.uploads.php у вашего корня / а затем позвоните ему в функции images().

Затем вы можете получить имя файла или каталог, который был запрошен в PHP, посредством:

$_SERVER['REQUEST_URI']

Если вам нужно, чтобы это правило действовало только на .jpg тогда мы можем изменить правило перезаписи. В противном случае это будет поддерживать .png, .gif и даже каталоги, такие как /uploads/user1234/images/.

  • 1
    Эй, спасибо за быстрый ответ. Это будет работать, но у меня уже есть RewriteRule. Я добавил больше деталей к моему вопросу. Можете ли вы помочь мне интегрировать это с моим текущим правилом?
  • 0
    Это интересный переписать у вас в настоящее время и технически новый вопрос. Дай мне подумать. Если вы создадите новый вопрос, пока я смотрю, я просто посмотрю на него. Подождите, вам тоже нужны изменения в PHP? Да, я не уверен, как интегрировать в ваше текущее правило переписывания, принять решение и создать новый вопрос из-за правок?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню