RewriteRule在一个子域上工作,但在另一个子域上没有?

时间:2014-08-26 10:41:35

标签: apache .htaccess mod-rewrite

设置场景:

  • 我有2个版本的网络应用程序我正在工作,每个版本都在自己的子域中独立运行,我们称之为 v1.mydomain.com v2 .mydomain.com来
  • 我使用PHP和FPDF在网站上生成PDF,并且当您使用FPDF将图像插入PDF时,其中一个要求是图像文件名必须以 .jpg <结尾/ em>或 .png etc-它从文件扩展名标识文件类型,而不是从Content-Type标头或提供的MIME类型参数标识文件类型。
  • 我编写了一个动态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版本等)完全相同,它们托管在同一台服务器上,并且文件权限在两个子域之间完全匹配。

我现在一直在努力想出这个问题太多时间,并希望得到一些帮助。如果您需要任何进一步的信息,请告诉我。谢谢!

编辑1:

目前所有其他行都已注释掉,因此无法影响此问题,因此我认为在排除故障时无益。虽然完整的 .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]

编辑2:

  • 子域 v1 的文件存储在 /var/www/v1.mydomain.com /
  • 子域 v2 的文件存储在 /var/www/v2.mydomain.com /
  • 服务器有许多工作虚拟主机,这些都不是默认主机。

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和子域中的数字

0 个答案:

没有答案