我想通過.htaccess中的mod_rewrite將目錄中的所有圖像傳遞給watermark.php。mod_rewrite,無法重寫現有文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.jpg$ /watermark.php?path=%{REQUEST_FILENAME} [L]
它可以在本地機器上很好,但我的在線生產服務器上(共享主機)的所有圖像文件而無需重寫服務。
mod_rewrite在線啓用,但如果文件存在,則忽略規則。
什麼可能是錯的?
UPDATE
這裏是我的全部設置:有一個與主域的document_root的子文件夾的子域的域。
public_html (example.com DOCUMENT_ROOT)/
img (img.example.com DOCUMENT_ROOT)/
的.htaccess中的public_html文件夾:
<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]
的.htaccess中img
文件夾:
<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
文件夾中現有的圖像不rewrited。 Apache只是按照原樣服務它們。但是,例如,如果我請求不存在的文件,該規則將起作用,並且echo $_GET['path']
將完整的文件路徑打印到不存在的文件。
我試了一下,但還是:對於不存在的文件請求rewrited到watermark.php得很好,但如果要求現有的文件 - 它擔任是,忽略watermark.php :( – sevenWonders
@sevenWonders你有除此之外的其他任何重寫規則?如果是 - 請顯示所有這些規則。 – LazyOne
除了其他規則(請參閱lazyone註釋),如果您在watermark.php中回顯$ _GET ['path'],您會看到什麼? –