Apache,如何处理像标准 URL 这样的未知 php 文件?

COi*_*Oil 5 php apache vhosts symfony

我有一个 Symfony 网站,在那里我重命名了主要入口点,因此“index.php”无法访问,也无法被搜索引擎编入索引。它运作良好。但是,当我尝试访问这个文件时,我发现一个 404 文件没有找到,这个 404 页面是由 Apache 而不是由应用程序处理的,它是标准的 404 页面:

Not Found
The requested URL was not found on this server.
Run Code Online (Sandbox Code Playgroud)

我希望Symfony 应用程序处理像/index.php(实际上是 *.php)这样的 URL,以显示具有良好布局的自定义错误页面。我的虚拟主机看起来像这样,我尝试添加“目录索引”指令但没有成功。

# configuration/vhosts/prod/mywebsite.com-le-ssl.conf
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName www.mywebsite.com
        DocumentRoot /var/www-protected/mywebsite.com/public

        <Directory /var/www-protected/mywebsite.com/public>
            AllowOverride All
            Require all granted
            FallbackResource /my-secret-entry-point.php
        </Directory>

        RedirectMatch 404 /\.git

        ErrorLog /var/log/apache2/mywebsite.com_error.log
        CustomLog /var/log/apache2/mywebsite.com_access.log combined

        RewriteEngine on
        RewriteCond %{SERVER_NAME} =mywebsite.com
        RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

        SSLCertificateFile /etc/letsencrypt/live/www.mywebsite.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.mywebsite.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ler 6

这可以通过mod_rewrite,回复301

Options +FollowSymLinks
DirectoryIndex index.php

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Run Code Online (Sandbox Code Playgroud)

默认错误文档可用于将错误代码分派给 PHP:

ErrorDocument 404 https://mywebsite.com/error/page/404
ErrorDocument 500 https://mywebsite.com/error/page/500
Run Code Online (Sandbox Code Playgroud)

然后,您仍然可以发送任何header()想要的内容 - 或者只是显示具有相同标题的页面。