将 nginx 转换为 Apache 重写

将 nginx 转换为 Apache 重写

我正在尝试从 nginx 上的现有站点设置 Symfony。我的本地计算机是 Apache,这是 nginx 上的重定向方案。如何使用 RewriteRules 编写此方案?

location / {
               # try to serve file directly, fallback to rewrite
               try_files $uri @rewriteapp;
       }

       location @rewriteapp {
               # rewrite all to app.php
               rewrite ^(.*)$ /app.php/$1 last;
       }

       location ~ ^/(app|app_dev|config)\.php(/|$) {
               fastcgi_split_path_info ^(.+\.php)(/.*)$;
               include fastcgi_params;
               fastcgi_intercept_errors on;
               fastcgi_pass php_upstream; # Upstream on top of file
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param HTTPS off;
       }

}

答案1

location / {
               # try to serve file directly, fallback to rewrite
               try_files $uri @rewriteapp;
       }

       location @rewriteapp {
               # rewrite all to app.php
               rewrite ^(.*)$ /app.php/$1 last;
       }

第一部分似乎是唯一的重写。看起来可以在根文件中使用 Apache 上的 mod_rewrite 编写如下.htaccess

# Enable trailing pathname information (if not already)
AcceptPathInfo On

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /app.php/$0 [L]

在内部重写所有未映射到物理文件或目录的请求/app.php/<requested-url-goes-here>

由于这会使用 URL 上的尾随路径信息 ( /$0),因此您需要确保服务器允许这样做,否则您将立即收到 404 Not Found。但是,这通常是默认启用的(尽管它确实取决于处理程序)。

相关内容