【发布时间】:2011-11-26 17:18:46
【问题描述】:
我正在尝试使用 .htaccess 中的 mod_rewrite 将目录中的所有图像传递给 watermark.php。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.jpg$ /watermark.php?path=%{REQUEST_FILENAME} [L]
它在本地机器上运行良好,但在我的在线生产服务器(共享主机)上,所有图像文件都无需重写即可提供。
在线启用mod_rewrite,但如果文件存在则忽略规则。
可能出了什么问题?
更新
这是我的完整设置:在主域的 document_root 的子文件夹中有一个带有子域的域。
public_html (example.com DOCUMENT_ROOT)/
img (img.example.com DOCUMENT_ROOT)/
public_html 文件夹中的.htaccess:
<FilesMatch "\.(inc\.php|log)$">
Deny from all
</FilesMatch>
Options -Indexes +FollowSymLinks
php_value short_open_tag 0
php_value auto_prepend_file /home/username/public_html/bootstrap.inc.php
RewriteEngine On
RewriteCond %{HTTP_HOST} ^img\. [NC]
RewriteRule .* - [L]
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^example\. [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ shop/$1 [L]
img 文件夹中的.htaccess:
<FilesMatch "\.(inc|log)$">
Deny from all
</FilesMatch>
Options -Indexes +FollowSymLinks
php_value short_open_tag 0
php_value auto_prepend_file none
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.jpg$ /watermark.php?path=%{REQUEST_FILENAME} [L]
问题是img 文件夹中的现有图像没有被重写。 Apache 只是按原样服务它们。但是,例如,如果我请求不存在的文件,则规则有效,echo $_GET['path'] 将完整的文件路径打印到不存在的文件。
【问题讨论】:
标签: .htaccess mod-rewrite