我希望apache将所有内容重写到我的index.php中,这意味着apache不应该处理任何内容,它应该忽略url输入并将其转发到index.php。
我已多次搜索过,我发现的最佳解决方案是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
但今天我注意到,如果我进入现有路径,apache将显示禁止页面,我不想要那样。我想要的是始终显示index.php无论uri是什么(显然是域名背后的部分:P)。
我使用$_SERVER['REQUEST_URI']
让PHP使用MVC应用程序路由所有内容,因此尝试处理url输入的apache非常矛盾。
我禁用了索引,我也在考虑拒绝访问文档根目录,只允许index.php所在的文件夹:
的httpd.conf:
<Directory "/srv/http">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all denied
</Directory>
vhost.conf:
<VirtualHost *:80>
ServerName example.com
#Redirect permanent / http://www.example.com/
DocumentRoot "/srv/http/example.com/www"
<Directory "/srv/http/example.com/www">
Require all granted
<Files "index.php">
SetHandler "proxy:unix:/run/php-fpm/www.example.sock|fcgi://localhost/"
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
</Directory>
<IfModule dir_module>
DirectoryIndex index.php
</IfModule>
</VirtualHost>
我甚至想只允许访问index.php文件,但这可能有点过分了吗?
在Require all granted
区块内移动<Files>
不起作用,但这是次要的,您可能会阻止我尝试(可能甚至不可能或不必要)。
那么,我怎样才能阻止apache处理网址?让我的MVC应用程序处理路由。
答案 0 :(得分:1)
您正在使用的重写代码明确排除了现有网址,因此请停止此操作。您也不需要RewriteBase
。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteRule . index.php [L]
</IfModule>
如果您需要更多信息,请与我们联系,但看起来应该让您在正确的方向上找到您想要实现的目标。你有没有任何图像文件,CSS,你想让Apache自己服务吗?这是排除现有网址的常见原因。