我希望我能澄清我的问题。我有一个重写规则。它工作正常,但如果我键入点和文件扩展名,它会查找目录。我想删除它。基本上我想编辑我网站上传的图像
如果您不理解我的问题,我可以通过示例更好地解释。
我有文件夹“/ uploads / images /”。然后我有里面的图像(例如test.jpg)。我的控制器通过使用第一个参数打开类文件并查找具有第二个参数名称的函数来工作。所以如果我试图打开
www.example.com/uploads/images
它会尝试打开class.uploads.php并运行名为images的函数。我还有第三个参数 - $ _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"]);
...
答案 0 :(得分: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/
等目录。