在我的phpinfo()命令中,它显示mod_rewrite已启用,但我仍然得到apache的默认未找到的页面而不是我自己的" 404"页。这是我的.htaccess:
RewriteEngine on
RewriteRule ^(.*)$ test_modrw.php
这是phpinfo中显示mod_rewrite已启用的部分:
修改
感谢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]
修改
你们可以和我的其他人一样提出这个问题吗?所以。已经禁止了我,因为他们认为我的问题质量很差,因为很少有人赞成。
答案 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.php
和Multiviews
等双重扩展时,无论默认的Apache配置是什么。
在文件夹/虚拟主机基础上控制它比在服务器级别上控制它要好得多。
我还强烈建议从主配置文件中完全禁用Indexes
,因为它是列出不需要的文件的开门(基本上,它显示了没有索引文件的任何文件夹的内容)。