Apache mod_rewrite差异

时间:2017-02-15 13:04:40

标签: apache .htaccess mod-rewrite

社区,

我有以下问题:对于私有项目,我想用mod_rewrite创建好的URL。

本地(Win 10,Apache 2.4.23)我的.htaccess中的每个规则都可以正常工作。 远程(Ubuntu 16.04,Apache 2.4.18)前3条规则根本不起作用,特别是全部返回404未找到错误。

请看一下:

# Basic site rules
RewriteRule ^login$ /login.php
RewriteRule ^logout$ /login.php?logout
RewriteRule ^signup$ /signup.php
RewriteRule ^confirm/(.*)$ /signup.php?confirm&regkey=$1

# mail list
RewriteRule ^mails$ /manage_mail.php
RewriteRule ^mail/list/ip$ /manage_mail.php?mode=create_iplist
RewriteRule ^mail/list/usernames$ /manage_mail.php?mode=create_usernamelist

and more rules here...

规则1-3(登录,注销,注册)返回上述404错误。 以下每条规则都按预期工作。

有什么想法吗? 提前谢谢。

编辑#1:划伤

编辑#2:这是我正在使用的VHost:

<VirtualHost *:80>
    ServerName domain.me
    ServerAdmin postmaster@domain.me
    DocumentRoot /var/www/domain.me/html
    <Directory /var/www/domain.me/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
    </Directory>
    ErrorLog  "|/usr/bin/cronolog /var/www/domain.me/log/%Y-%m/error_%Y-%m-%d.log"
    CustomLog "|/usr/bin/cronolog /var/www/domain.me/log/%Y-%m/access_%Y-%m-%d.log" combined
</VirtualHost>

我的/etc/apache2/apache2.conf看起来很相似。

2 个答案:

答案 0 :(得分:1)

感谢您的帮助,我自己找到了解决方案。问题是

中的MultiViews选项
<Directory /var/www/domain.me/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
</Directory>

删除它并重新加载配置后,一切正常。

答案 1 :(得分:0)

有时在apache的配置中userSvc.getAuthenticatedUser(function() {}, function() {}); 选项未设置为AllowOverride时会出现此问题。

我不知道您在哪里设置了配置,但我认为您已将其设置为All/etc/apache2/apache2.conf

在该文件中,您必须转到/etc/apache2/httpd.conf标记,其中设置了<Directory "LOCATION"> [1]文件夹的位置,并添加了public_html参数。

或者,如果找不到该目录,只需在最后添加AllowOverride All文件夹的新<Directory>标记。

它应该是这样的:

public_html

[1]我假设这是你拥有php文件的文件夹的名称。