为什么我的mod_rewrite即使在启用时也不起作用?

时间:2017-05-09 18:09:17

标签: php apache .htaccess url mod-rewrite

在我的phpinfo()命令中,它显示mod_rewrite已启用,但我仍然得到apache的默认未找到的页面而不是我自己的" 404"页。这是我的.htaccess:

RewriteEngine on
RewriteRule ^(.*)$ test_modrw.php

这是phpinfo中显示mod_rewrite已启用的部分:

enter image description here

修改

感谢Agama。但仍有一个问题,我仍然可以直接访问root中的文件。例如:

example.com/test_file.php

仍然可以访问而不是.htaccess将所有内容路由到index.php,它也位于根目录中。这是我的.htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

修改

你们可以和我的其他人一样提出这个问题吗?所以。已经禁止了我,因为他们认为我的问题质量很差,因为很少有人赞成。

2 个答案:

答案 0 :(得分:1)

请更改以下内容,以允许访问/etc/apache2/sites-available/etc/httpd/conf.d/

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all

答案 1 :(得分:0)

更好的答案是在必要的AllowOverride指令中检查all是否设置为none而不是<Directory>(找到与您提供的文件对应的那个) )。请注意,它会使您的.htaccess文件覆盖配置中的许多选项。

只有当你知道自己在做什么时才这样做(也就是说,不要在其他用户可以上传文件的服务器上执行此操作,因为他们可能会更改一些您不想更改的选项)。如果你是这个服务器上唯一一个托管站点,那就好了。

如果您意识到安全性和/或其他用户可以执行的操作,为了重写内容,您只需将AllowOverride none更改为AllowOverride FileInfo Options

FileInfo将启用重写规则,Options将启用以下内容。

然后,在您的.htaccess文件中,只需在开头添加:

Options +FollowSymLinks -MultiViews

通过这样做,您将确保启用FollowSymLinks选项,并且MultiViews被禁用(如注释中所指出的,它将导致在某些情况下重写规则的问题 - 通常,当你有.en.php.fr.phpMultiviews等双重扩展时,无论默认的Apache配置是什么。

在文件夹/虚拟主机基础上控制它比在服务器级别上控制它要好得多。

我还强烈建议从主配置文件中完全禁用Indexes,因为它是列出不需要的文件的开门(基本上,它显示了没有索引文件的任何文件夹的内容)。