更改 Apache 配置文件后的 Symfony 路由问题

Posted

技术标签:

【中文标题】更改 Apache 配置文件后的 Symfony 路由问题【英文标题】:Symfony Routing Issue After Changing Apache Configuration File 【发布时间】:2020-08-29 19:32:36 【问题描述】:

我的 symfony 项目有问题,让我一步一步解释我做了哪些更改。

    我的旧工作项目:

我的旧项目的 URL 看起来像 http://127.0.0.1/my_project/something

httpd.conf 文件

Alias /my_project/something/auth /opt/www/my_project/auth
<Directory /opt/www/my_project/auth>
    AllowOverride None
    Require all Granted
</Directory>

Alias /my_project/something /opt/www/my_project/web
<Directory /opt/www/my_project/web>
    AllowOverride None
    Require all Granted

    RewriteEngine On
    RewriteBase /my_project/something

    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|m?js|png|svgz?|webp|webmanifest|pdf)$ $1.$3 [L]

    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^(.*)$ app.php [PT]
</Directory>

我的路线文件看起来像

routes.yml 文件

# routes.yml

get_data:
    path:     /api/select2/get-data
    methods:  [GET]
    defaults:
        _controller: 'my_folder\Controllers\IndexController::apiGetData'

项目在上述配置下运行良好。

    我的新项目在更改后停止工作:

现在我想更改 URL,例如 http://127.0.0.1/my_project/something/MY-SLUG/

为此,我更改了我的 httpd.conf 文件

新的httpd.conf

Alias /my_project/something/auth /opt/www/my_project/auth
<Directory /opt/www/my_project/auth>
    AllowOverride None
    Require all granted
</Directory>

Alias /my_project/something /opt/www/my_project/web
<Directory /opt/www/my_project/web>
    AllowOverride None
    Require all granted
    DirectorySlash Off

    RewriteEngine On
    RewriteBase /my_project/something/
    RewriteOptions AllowNoSlash

    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^[^.]+[^\/]$ $0\/ [R]

    RewriteCond %QUERY_STRING !slug=
    RewriteRule ^([a-zA-Z0-9\-]+)/(.*)$ $2?slug=$1 [L,QSA]
    RewriteRule ^([a-zA-Z0-9\-]+)$ ?slug=$1 [L,QSA]

    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|m?js|png|svgz?|webp|webmanifest|pdf)$ $1.$3 [L]
</Directory>

我没有更改我的 route.yml 文件,

我想在会话中设置 MY-SLUG,然后在我的项目中的任何地方使用它,但是在更改后我无法访问我的 Symfony 项目的任何路由。我不希望我的 httpd.conf 文件中的更改影响我的项目,我只想要来自 URL 的 MY-SLUG。

有解决办法吗?

【问题讨论】:

【参考方案1】:

我觉得你不见了

RewriteCond %REQUEST_FILENAME !-f

重写规则 ^(.*)$ app.php [PT]

路由不工作的原因是你的第二个配置没有指向 Symfony 的入口文件 app.php

【讨论】:

我正在使用 index.php,我也尝试使用 app.php,但它不起作用

以上是关于更改 Apache 配置文件后的 Symfony 路由问题的主要内容,如果未能解决你的问题,请参考以下文章

配置 symfony monolog 保留 apache 日志

删除捆绑包后的 symfony 致命错误

Symfony 2 Apache 2.4 php7 升级 Vhost 文件

配置 Apache (MAMP) 以使用 Symfony2

D. 更改虚拟目录

apache_conf Symfony完整的.htaccess文件