12

我试图将我的主页或网站上的任何其他页面重定向到特定的 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]

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

它仍然不起作用。

4

5 回答 5

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>

现在更改AllowOverride NoneAllowOverride All. 之后不要忘记像这样重新启动你的apache:

$ service apache2 restart
于 2013-03-27T12:06:24.837 回答
8

作为对摩根的回答的补充,AllowOverride All有时放入您的虚拟主机是不够的。我的虚拟主机中有这个:

<VirtualHost *:80>
  ...
  <Directory />
   ...
   AllowOverride All
   ...
  </Directory>
</VirtualHost>

您会期望它可以工作,不是吗,<Directory />这意味着它应该应用于文件系统上的任何地方。但.htaccess还是被无视了。重新启动服务器没有帮助。我将垃圾放入 .htaccess 文件中以确认它没有被读取。

我的错误是假设虚拟主机覆盖了全局配置。确实如此:我的上述配置覆盖了/目录的任何全局设置。但是全局配置会覆盖它/var/www/并在下面覆盖它。我的解决方法是:

<VirtualHost *:80>
  ...
  <Directory /var/www>
   ...
   AllowOverride All
   ...
  </Directory>
</VirtualHost>

(这假设不需要在外部应用任何其他配置/var/www;如果需要,<Directory />请为该特殊配置创建一个单独的块。)

于 2014-08-18T15:38:13.517 回答
2

我在同样的问题上苦苦挣扎,达伦库克的回答给了我找到解决方案的明确线索。

www我的应用程序位于公共路径之外的某个文件夹中,比如说在/opt/my_app. 我无法创建VirtualHost,所以我在 Apache 的公共wwwponting 中创建了一个符号链接到我的文件夹:

/var/www/html/my_app -> /opt/my_app

问题是,在我的应用程序的 Apache 配置文件中,我指定:

<Directory /opt/my_app>
  AllowOverride All
</Directory>

我的.htaccess文件没有被读取。然后我看到在 Apache 的配置中是这样的:

<Directory /var/www/html>
  AllowOverride None
</Directory>

然后我意识到Apache 配置文件不关心 symlinks,因此一般规则被应用于我的应用程序的文件夹。我改为Directory

<Directory /var/www/html/my_app>
  AllowOverride All
</Directory>

一切正常。

于 2017-09-27T10:51:23.790 回答
0

假设 /var/www/html 是工作目录:从 AllowOverride None 更改为 AllowOverride All

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
于 2021-05-30T10:19:54.537 回答
0

如果在更新 apache2.conf 后重定向不起作用

根据接受的答案,我更新AllowOverride Noneapache2.confAllowOverride All文件中,但是通过 .htaccess 文件的重定向仍然对我不起作用

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All   # did not work inspite of setting to "All"
    Order allow,deny
    allow from all
</Directory>

什么对我有用...

我还必须启用模块重定向

// enable module redirection
sudo a2enmod rewrite

当然,不要忘记重新启动您的 apache 服务器以使更改生效

参考

于 2019-10-03T14:29:43.597 回答