.htaccess没有被阅读

use*_*837 12 .htaccess

我试图将我的主页或网站上的任何其他页面重定向到特定的PHP页面.这是我的htaccess

Redirect 301 http://test.com/info http://test.com/get_forms_data.php
Options +FollowSymlinks
RewriteEngine ON
RewriteRule ^test.php$ http://test.com/get_forms_data.php [R=301,L]
Run Code Online (Sandbox Code Playgroud)

我检查了我的apache服务器.rewrite已启用.

它仍然无法正常工作.

Mor*_*lde 27

如果无论你把什么放入你的.htaccess文件,你甚至不会得到错误,这意味着你可能需要

AllowOverride All

在您的站点配置中设置.

如果你在ubuntu上,那么寻找配置的地方就是/etc/apache2/sites-available/.default如果这是默认LAMP堆栈的库存安装(https://help.ubuntu.com/community/ApacheMySQLPHP),您应该找到一个名为的文件.

关键部分是这样的:

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

现在AllowOverride None改为AllowOverride All.之后不要忘记重新启动你的apache:

$ service apache2 restart
Run Code Online (Sandbox Code Playgroud)


Dar*_*ook 8

作为Morgan回答的补充,放入AllowOverride All虚拟主机有时是不够的.我在我的虚拟主机中有这个:

<VirtualHost *:80>
  ...
  <Directory />
   ...
   AllowOverride All
   ...
  </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

你会期望这个工作,不是吗,<Directory />意味着它应该应用于文件系统的任何地方.但.htaccess仍被忽视.重新启动服务器没有帮助.我把垃圾放在.htaccess文件中以确认它没有被读取.

我的错误是假设虚拟主机覆盖了全局配置.它的种类:我的上述配置覆盖了/目录的任何全局设置.但是全局配置会将其覆盖在/var/www/下方.我的修复是:

<VirtualHost *:80>
  ...
  <Directory /var/www>
   ...
   AllowOverride All
   ...
  </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

(这假设没有其他配置需要在外部应用/var/www;如果是,<Directory />则为该特殊配置创建一个单独的块.)