我不知道为什么但是我的简单.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。我该怎么办?
答案 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