防止apache处理网址

时间:2017-05-25 19:03:29

标签: apache mod-rewrite url-rewriting

我希望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应用程序处理路由。

1 个答案:

答案 0 :(得分:1)

您正在使用的重写代码明确排除了现有网址,因此请停止此操作。您也不需要RewriteBase

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index\.php$ - [L]
    RewriteRule . index.php [L]
</IfModule>

如果您需要更多信息,请与我们联系,但看起来应该让您在正确的方向上找到您想要实现的目标。你有没有任何图像文件,CSS,你想让Apache自己服务吗?这是排除现有网址的常见原因。