Надеюсь, я могу решить свой вопрос. У меня есть правило 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"]);
...
В папке 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/
.