首页 > 解决方案 > Apache 重写规则擦除全局 $_SERVER['request-uri']

问题描述

我目前正在维护一个在服务器本地运行的遗留应用程序。我用这个服务器创建了一个具有相同规格的 Dockerfile,但我遇到了一个奇怪的错误。这个遗留应用程序是用老程序员自己开发的自制框架构建的。他严重依赖全局 $_SERVER['request_uri'] 的值来进行路由。

在服务器中,该值是请求的 uri(即 www.test.local),在 docker 版本中,我只得到“/”作为响应。这是我的 docker-compose

#-- v2 syntax
version: '2'

# Named volumes
volumes:
# MySQL Data
  hibrida-mysql-data:
  driver: local

  services:
   # MySQL (5.7)
   mysql:
    image: mysql:5.7
    container_name: hibrida-mysql
   volumes:
    - ./.db-data/:/var/lib/mysql
ports:
  - "3306:3306"
environment:
  - MYSQL_ROOT_PASSWORD=hibrida    
  - MYSQL_DATABASE=hibrida
  - MYSQL_USER=hibrida
  - MYSQL_PASSWORD=hibrida

# PHP (with Nginx)
app:
image: 1and1internet/ubuntu-16-apache-php-5.6
container_name: hibrida-apache
environment:
  XDEBUG_ENABLED: "true"
  XDEBUG_CONFIG: "remote_host=192.168.25.3"
  PHP_IDE_CONFIG: "serverName=dev.local"
volumes:
  - ./public:/var/www
  - ./config/vhost.conf:/etc/apache2/sites-available/vhost.conf
  - ./config/vhost.conf:/etc/apache2/sites-enabled/vhost.conf
  #- ./config/php.ini:/usr/local/etc/php/php.ini
  #- ./config/www.conf:/etc/php7/php-fpm.d/www.conf

ports:
  - "80:80"
links:
  - mysql

我刚刚登录到 apache 容器并打开了 ae2nmod rewrite。会是什么呢?

标签: phpdockermod-rewrite

解决方案


Using$_SERVER['REQUEST_URI']是查看来自客户端的原始、未修改请求的最可靠方法之一,它反映了 HTTP 请求的第一行,无论 PHP 脚本是如何被调用的。它不应包含主机名,并且/在访问文档根目录时会出现。其他东西正在修改它。


推荐阅读