我在/CIAppScaffolding/public/upload/中有我的图像,并希望即时将它们调整为一些固定大小。
为此,我制作了一个 Controller Resize
,方法是 index
来调整大小。
public function index($location = '', $size = '', $image = '') {
//Resizing code here
}
现在,为了仅重写对不存在的图像的请求,我编写了以下重写规则,这些规则似乎从 PATH_TRANSLATED
中删除了 CIAppScaffolding
,然后我得到404(通过 Codeigniter)。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /CIAppScaffolding/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^public/upload/([a-z]+)/(large|catalog|thumb)/([^/]+\.(?:jpg|png|jpeg))$ index.php/resize/index/$1/$2/$3 [L]
RewriteCond $1 !^(index\.php|public|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>
编辑:
现在,我采用了以下可行的方法,但这也应该只使用 .htaccess 重写规则。
$route['^public/upload/([a-z]+)/(large|catalog|thumb|banner)/([^/]+\.(?:jpg|png|jpeg))$'] = 'resize/index/$1/$2/$3';
最佳答案
我尝试在 Codeigniter 3 中使用以下在 htaccess 中编写的代码
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /ci-admin/
RewriteCond %{DOCUMENT_ROOT}/ci-admin/assets/uploads/%{REQUEST_FILENAME} !-f
RewriteRule ^assets/uploads/(large|catalog|AdminUser)/([^/]+\.jpg|\.png|\.jpeg)$ index.php/resize/index/$1/$2 [L]
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>
打印服务器变量后我发现了什么:
[REQUEST_URI] => /ci-admin/assets/uploads/AdminUser/IMG_20140623_2047229.jpg
[SCRIPT_NAME] => /ci-admin/index.php
[PATH_INFO] => /resize/index/AdminUser/IMG_20140623_2047229.jpg
[PATH_TRANSLATED] => D:\wamp\www\resize\index\AdminUser\IMG_20140623_2047229.jpg
[PHP_SELF] => /ci-admin/index.php/resize/index/AdminUser/IMG_20140623_2047229.jpg
除了 CodeIgniter 本身以不同方式解释“[PATH_TRANSLATED]”或覆盖我们的 htaccess 规则外,所有规则都工作正常,因此它抛出 404 错误。
我们需要了解 CI 如何处理此类请求。仍在调试我们缺少的地方。
如果您发现任何成功,请告诉我。
关于php - 将对不存在图像的请求重写到调整大小 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43435452/