我试图将我的主页或网站上的任何其他页面重定向到特定的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)
作为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 />则为该特殊配置创建一个单独的块.)