Apache,如何像标准 URL 一样处理未知的 php 文件?
Apache, how to handle unknown php file like standard URLs?
我有一个 Symfony 网站,我在其中重命名了主要入口点,因此 "index.php" 无法访问,也无法被搜索引擎编入索引。它运作良好。但是,当我尝试访问这个文件时,我得到一个 404 文件未找到,这个 404 页面由 Apache 而不是应用程序处理,它是标准的 404 页面:
Not Found
The requested URL was not found on this server.
我希望 Symfony 应用程序处理 /index.php(实际上是 *.php)这样的 URL 以显示自定义错误布局良好的页面。我的虚拟主机看起来像这样,我尝试添加 "directory 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>
这可以通过 mod_rewrite
完成,回复 301
:
Options +FollowSymLinks
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ / [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
默认错误文档可用于将 error-codes 分派到 PHP:
ErrorDocument 404 https://mywebsite.com/error/page/404
ErrorDocument 500 https://mywebsite.com/error/page/500
然后仍然可以发送任何想要的 header()
- 或者只显示具有相同 headers.
的页面
我有一个 Symfony 网站,我在其中重命名了主要入口点,因此 "index.php" 无法访问,也无法被搜索引擎编入索引。它运作良好。但是,当我尝试访问这个文件时,我得到一个 404 文件未找到,这个 404 页面由 Apache 而不是应用程序处理,它是标准的 404 页面:
Not Found
The requested URL was not found on this server.
我希望 Symfony 应用程序处理 /index.php(实际上是 *.php)这样的 URL 以显示自定义错误布局良好的页面。我的虚拟主机看起来像这样,我尝试添加 "directory 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>
这可以通过 mod_rewrite
完成,回复 301
:
Options +FollowSymLinks
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ / [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
默认错误文档可用于将 error-codes 分派到 PHP:
ErrorDocument 404 https://mywebsite.com/error/page/404
ErrorDocument 500 https://mywebsite.com/error/page/500
然后仍然可以发送任何想要的 header()
- 或者只显示具有相同 headers.