nginx - 无需尝试斜线重定向到根目录的 URL

nginx - 无需尝试斜线重定向到根目录的 URL

我目前有一个 nginx 配置,除了 URL 不包含斜杠时的小问题外,该配置在所有意图和目的上都可以正常工作。

该网站是 Magento,位于子目录中(相对 URL 问题本身就是一场噩梦,因为其他网站运行时都没有子目录)。问题的根源在于附加查询字符串时没有使用斜杠。

但是,例如:

http://www.example.com/magento/category/

可以正确指向相应页面,但是当我从 URL 中删除斜杠时,它会重定向到http://www.example.com/category

到目前为止,我已经在 Magento 的核心中添加了一些代码来拦截并在每个 url 的末尾和查询字符串之间添加一个斜杠。

然而,我怀疑这是一个 nginx 问题,通过代码解决它并不是理想的方法。

下面是我为子目录制定的 nginx 配置:

location ~ fr/ {
location ~ (/(app/|includes/|/pkginfo/|var/|report/config.xml)|/\.svn/|/.hta.+) {
   deny all;
}

location ~* \.(js|css)$ {
     expires 30d;
}

location ~ (\.php|/downloader/?|/report/?)$ {
  if ($request_uri ~ /(downloader|report)$){ # no trailing /, redirecting
    rewrite  ^(.*)$ $1/ permanent;
  }
  fastcgi_index index.php;
  include /etc/nginx/fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  if (-e $request_filename) { # check if requested path exists
    fastcgi_pass belgiumnlbackend;
  }
}

index index.php;
try_files $uri $uri/fr/ @handler;
expires 30d;
   # set expire headers
   if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)$") {
       expires max;
   }
   # set fastcgi settings, not allowed in the "if" block
   include /etc/nginx/fastcgi_params;
   fastcgi_param SCRIPT_FILENAME  $document_root/fr/index.php;
   fastcgi_param SCRIPT_NAME  /fr/index.php;
   fastcgi_param SERVER_PORT 80;
   fastcgi_param PRODUCTION true;
   fastcgi_param HTTPS $sslmode;
   fastcgi_index /fr/index.php;
   fastcgi_param MAGE_RUN_CODE redacted;
   fastcgi_param MAGE_RUN_TYPE store;
   # rewrite - if file not found, pass it to the backend
   if (!-f $request_filename) {
       fastcgi_pass belgiumnlbackend;
       break;
   }
}

根目录位置运行正常,只是这个子目录有问题。我在这里做错了什么吗?

我快速浏览了 serverfault,没有找到任何可以解决这个问题的方法,不过我可能完全看不见,所以如果这是一个重复的问题,请原谅。

提前致谢!

相关内容