我希望能够提供一些内容基于付款条件的图像。该图像应可在http://example.com/banner/image_**code**.gif
(每个客户端的代码都不同。
重写规则应将该链接更改为index.php?option=com_joomlacomponent&img=**code**
写了一个我应该非常简单的规则来完成它,但它不起作用。
我将重写规则添加到文档根目录中的现有 .htaccess 中。.htaccess包含添加标准斜杠www的规则,将旧的php文件重定向到新的php文件,并将joomla安装的目录的名称添加到路径中。
文件/文件夹的结构如下:
/.htaccess
/cms/.htaccess (joomla standard .htaccess)
/cms/* (joomla files)
我尝试了以下规则:
RewriteRule ^banner/image_(.*).gif$ index.php?option=com_joomlacompanent&
img=$1
我得到了joomla的主页(添加各种标志没有帮助,例如[L]。
我尝试添加一个重写来检查条件是否满足:
RewriteCond %{REQUEST_URI} /banners/image_(.*).gif$
RewriteRule . http://othersite.com/%1 [L]
我被重定向到其他网站/代码,其中代码是初始 url 中的代码。
所以我想知道我是否错过了一些重写规则的重要概念,或者这个规则与其他规则或 joomla .htaccess 之间是否存在一些干扰。
编辑:我发现了问题所在。我错误地认为我的 php 可以暂时提供调试消息(回声)而不是真实图像。可能 joomla 不允许重定向到主页。
现在我在文档根目录的 .htaccess 中使用以下规则:
RewriteCond %{REQUEST_URI} /banner/image_(.*).gif$
RewriteRule .* index.php?option=com_joomlacomponent&img=%1
在组件 php 文件中:
$img = 'path to an img file';
header('Content-Type: image/gif');
readfile($img);
$mainframe =& JFactory::getApplication();
$mainframe->close();
exit;
我认为这个问题可以标记为已解决。
由于您的规则位于文档根目录的 htaccess 文件中,您是否不需要调用 cms 文件夹?
RewriteRule ^banner/image_(.*).gif$ /cms/index.php?option=com_joomlacompanent&img=$1 [L]
另请注意,您希望该规则相对靠近顶部(但低于任何重定向规则)。