设置场景:
我编写了一个动态PHP脚本,可以动态生成我使用FPDF插入PDF文档的图像。要在浏览器中访问图像,我将使用以下链接:
http://v1.mydomain.com/scaled.php?id=1&w=1024&h=618
在查询字符串中提供了图像生成所需的参数。
我使用Apache .htaccess 文件使我能够将以.jpg结尾的文件名路由到此脚本:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^fpdf-scaled-(.*)-(.*)x(.*).jpg$ /scaled.php?id=$1&w=$2&h=$3
目前,这在子域 v1 上运行得很好,但在 v2 上却没有,我在尝试找到 fpdf-时遇到了HTTP 404 File Not Found错误scaled-1-1024x618.jpg 告诉我规则还没有被应用,因为它没有看 scaled.php 。
托管环境(PHP版本,Apache版本等)完全相同,它们托管在同一台服务器上,并且文件权限在两个子域之间完全匹配。
我现在一直在努力想出这个问题太多时间,并希望得到一些帮助。如果您需要任何进一步的信息,请告诉我。谢谢!
目前所有其他行都已注释掉,因此无法影响此问题,因此我认为在排除故障时无益。虽然完整的 .htaccess 如下所示供参考(我确信这可以更有效地编写,欢迎您对此提出评论建议):
RewriteEngine on
# GZip compression (*.js)
RewriteCond %{REQUEST_URI} (.*)\.js
RewriteRule ^(.*\.)(js)$ gzip.php?file=$1$2 [L]
# GZip compression (*.css)
RewriteCond %{REQUEST_URI} (.*)\.css
RewriteRule ^(.*\.)(css)$ gzip.php?file=$1$2 [L]
# GZip compression (*.swf)
RewriteCond %{REQUEST_URI} (.*)\.swf
RewriteRule ^(.*\.)(swf)$ gzip.php?file=$1$2 [L]
# Exclude publicly accessible static resource folders from friendly URL rewriting
RewriteRule ^(lib|templates) - [L]
# Fpdf URL rewriting for photos
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^fpdf-scaled-([0-9]+)-([0-9]+)x([0-9]+)\.jpg$ /scaled.php?id=$1&w=$2&h=$3 [L]
# Friendly URL rewriting
RewriteCond $1 !^(index\.php|gzip\.php|scaled\.php|robots\.txt|sitemap\.xml)
RewriteRule ^(.*)$ /index.php/$1 [L]
http://v2.mydomain.com/fpdf-scaled-1-1024-618.jpg请求的重写日志(省略IP地址和匿名子域名):
[rid#2ba56a92b108/initial] (2) init rewrite engine with requested uri /fpdf-scaled-6-1024x618.jpg
[id#2ba56a92b108/initial] (1) pass through /fpdf-scaled-6-1024x618.jpg
[rid#2ba56a92b108/initial] (2) [perdir /var/www/v2.mydomain.com/] rewrite 'fpdf-scaled-6-1024x618.jpg' -> '/scaled.php?id=6&w=1024&h=618'
有趣的是,当v1与v2完美配合时,相同的三行被添加到v1的重写日志中,而v2不能处理唯一的区别,即唯一的日志ID和子域中的数字