Apache, как обработать неизвестный файл php как стандартные URL? - PullRequest
5 голосов
/ 26 января 2020

У меня есть Symfony веб-сайт, на котором я переименовал основную точку входа, поэтому «index. php» не может быть доступен или проиндексирован поисковыми системами. Это работает хорошо. Но когда я пытаюсь получить доступ к этому файлу, я получаю файл 404, который не найден, эта страница 404 обрабатывается Apache, а не приложением, это стандартная страница 404:

Not Found
The requested URL was not found on this server.

Я бы такие URL-адреса, как / index. php (на самом деле *. php), которые должны обрабатываться приложением Symfony для отображения настраиваемой страницы ошибок с хорошим макетом. Мой vhost выглядит так, я пытался добавить директиву «index каталога», но безуспешно.

# 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>

1 Ответ

6 голосов
/ 30 января 2020

Это можно сделать с помощью 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]

Документы об ошибках по умолчанию можно использовать для отправки кодов ошибок на PHP:

ErrorDocument 404 https://mywebsite.com/error/page/404
ErrorDocument 500 https://mywebsite.com/error/page/500

Затем можно отправлять все, что пожелает header(), или просто показать страницу с такими же заголовками.

...