2

我在 Apache 前面的 Nginx(设置为反向代理)有一些问题。我正在使用 Apache 来提供 PHP 文件并应用 .htaccess 规则。

Nginx 可以工作,但 .htaccess 中的一些重写没有。

我使用 timthumb.php 来管理媒体,例如:

/cache/150/100/file.jpg > /media/thumb.php?src=images/file.jpg&w=150&h=100

重写规则仅适用于 PHP 应用程序,但不适用于上述静态文件。当我尝试执行自己的静态规则时,Nginx 返回 404。

RewriteEngine On

RewriteRule ^cache/([0-9]+)/([0-9]+)/([a-z0-9_\-\.\/]+)$ /media/thumb.php?src=images/$3&w=$1&h=$2 [L]
RewriteRule ^upload/([0-9]+)/([0-9]+)/([a-z0-9_\-\.\/]+)$ /media/thumb.php?src=upload/$3&w=$1&h=$2 [L]

<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php/$0 [PT]
4

1 回答 1

1

我猜你是通过 nginx 直接为你的“/upload”和“/cache”目录提供服务 - 没有将它传递给 apache。

尝试以下规则:

 location ^~ /upload {
        .......
 }

 location ^~ /cache {
        .......
 }

在您在 nginx 配置中提供静态文件的位置之前。让我知道它是否有效 - 如果没有 - 也粘贴 nginx 配置的一部分。

更多阅读:http ://wiki.nginx.org/HttpCoreModule#location

取决于您在代理期间如何配置您的位置 - 它们具有不同的优先级。

于 2012-11-28T13:59:23.953 回答