silex、.htaccess、虚拟主机不起作用
silex, .htaccess, webhosting doesn't work
这是我在本地机器和虚拟主机上的文件 .htaccess,在本地一切正常,但在虚拟主机上我只能像 example.com/ 一样访问 web/index.php web/index.php
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /web/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
你的RewriteBase不正确,你应该只放目录,不要放文件名。此外,如果您的根项目是 Web 项目,则您的重写基础应该只是 / 并且在重写规则中您应该告诉 apache 重定向您的所有请求。所以,你应该使用类似的东西:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /web/index.php [QSA,L]
</IfModule>
但请记住,只有您的 Web 文件夹必须可以公开访问,而不是您的整个项目。如果可以,您应该更改它(否则您应该将一个 .htaccess 文件放在根项目中,另一个放在 web 文件夹中,但这超出了您的问题范围)。
这是我在本地机器和虚拟主机上的文件 .htaccess,在本地一切正常,但在虚拟主机上我只能像 example.com/ 一样访问 web/index.php web/index.php
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /web/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
你的RewriteBase不正确,你应该只放目录,不要放文件名。此外,如果您的根项目是 Web 项目,则您的重写基础应该只是 / 并且在重写规则中您应该告诉 apache 重定向您的所有请求。所以,你应该使用类似的东西:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /web/index.php [QSA,L]
</IfModule>
但请记住,只有您的 Web 文件夹必须可以公开访问,而不是您的整个项目。如果可以,您应该更改它(否则您应该将一个 .htaccess 文件放在根项目中,另一个放在 web 文件夹中,但这超出了您的问题范围)。