尽管AllowOverride All,.htacces文件仍无法正常工作

时间:2017-02-23 15:20:12

标签: apache .htaccess redirect mod-rewrite

我不知道为什么但是我的简单.htaccess文件在我的服务器上无效。

/var/www/html/.htaccess

RewriteEngine On
#RewriteCond %{HTTP_HOST} ^/$ [R=301,L]
#RewriteRule ^(.*)$ htt://www.onet.pl/$1 [L]
RewriteRule ^/lol$ /dev/public

我试图通过将所有流量重定向到另一台服务器或简单重定向myaddress / lol到myadress / dev / public进行测试,其中我有index.html文件。

模块REWRITE已启用

#a2enmod rewrite
Module rewrite already enabled 

这是我的/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
 AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

当我在/var/www/html/.htaccess中写垃圾并打开服务器主地址时,它会抛出错误消息,在apache日志中会看到.htaccess文件中有关错误命令的错误。

但是.htaccess中的重定向都不起作用。第二次重定向不会从adress / lol重定向到地址/ dev / public - 浏览器只会抛出没有/ dev站点。

我有root访问权限,服务器是Debian 8,apache 2.4.10。我该怎么办?

1 个答案:

答案 0 :(得分:0)

简单的问题是,您尝试在动态配置文件中使用带有重写规则的绝对路径。很明显,在这种情况下,由于这些愚蠢的动态配置文件的工作方式(.htaccess),您需要一个 relative 路径。

使用 relative 路径查看版本:

RewriteEngine On
RewriteRule ^lol$ /dev/public

处理这种差异的一种更智能的方法是使用在两种情况下都可以在真实主机配置中的动态配置文件中使用的模式:

RewriteEngine On
RewriteRule ^/?lol$ /dev/public

但最好的想法是不要使用这样的动态配置文件,而是使用http服务器主机配置。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。

这是官方文档(您肯定想要阅读),请查看标记为“Per-directory Rewrites”的部分: http://httpd.apache.org/docs/current/mod/mod_rewrite.html