Symfony 应用程序在使用 https 时显示目录列表
Symfony application shows directory listing when using https
普通 VHOST:
<VirtualHost *:80>
DocumentRoot /var/www/html/app/current/web
ServerAdmin me@app.foobar
ServerName app.foobar
ServerAlias www.app.foobar
<Directory /var/www/html/app/current/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options Indexes FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !HTTP/1.1$
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
</VirtualHost>
HTTPS VHOST:
<VirtualHost *:443>
DocumentRoot /var/www/html/app/current/web
ServerName app.foobar
ServerAdmin me@app.foobar
<Directory /var/www/html/app/current/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite>
Options Indexes FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !HTTP/1.1$
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
SSLEngine on
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2
SSLCertificateFile /ssl/app.foobar/app.foobar.crt
SSLCertificateKeyFile /ssl/app.foobar/app.foobar.key
SSLCACertificateFile /ssl/app.foobar/app.foobar.ca-bundle
</VirtualHost>
正如标题所说,当我使用常规端口 80 时,url 被重写为使用 app.php,但是当我尝试使用 https 端口 443 时,我得到的是一个目录列表。如何像使用 http 一样使用 https 重写 url?
我使用 Apache 2.2.16+ 中可用的 FallbackResource
指令解决了这个问题。
在官方 Symfony 文档中,此指令未用于保持与旧版本 Apache 的向后兼容。讨论是here.
代码示例:
<Directory /var/www/html/app/current/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
FallbackResource /app.php
</IfModule>
</Directory>
普通 VHOST:
<VirtualHost *:80>
DocumentRoot /var/www/html/app/current/web
ServerAdmin me@app.foobar
ServerName app.foobar
ServerAlias www.app.foobar
<Directory /var/www/html/app/current/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options Indexes FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !HTTP/1.1$
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
</VirtualHost>
HTTPS VHOST:
<VirtualHost *:443>
DocumentRoot /var/www/html/app/current/web
ServerName app.foobar
ServerAdmin me@app.foobar
<Directory /var/www/html/app/current/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite>
Options Indexes FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !HTTP/1.1$
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
SSLEngine on
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2
SSLCertificateFile /ssl/app.foobar/app.foobar.crt
SSLCertificateKeyFile /ssl/app.foobar/app.foobar.key
SSLCACertificateFile /ssl/app.foobar/app.foobar.ca-bundle
</VirtualHost>
正如标题所说,当我使用常规端口 80 时,url 被重写为使用 app.php,但是当我尝试使用 https 端口 443 时,我得到的是一个目录列表。如何像使用 http 一样使用 https 重写 url?
我使用 Apache 2.2.16+ 中可用的 FallbackResource
指令解决了这个问题。
在官方 Symfony 文档中,此指令未用于保持与旧版本 Apache 的向后兼容。讨论是here.
代码示例:
<Directory /var/www/html/app/current/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
FallbackResource /app.php
</IfModule>
</Directory>