本地主机 .htaccess 无法在 Ubuntu 上运行

本地主机 .htaccess 无法在 Ubuntu 上运行

我一直在尝试让我的.htaccess文件在我的本地主机上工作。我知道该文件可以工作,因为它在我的服务器上并且可以工作。但它似乎在本地不起作用。

我已经按照我能找到的教程设置了所有覆盖,下面是我的/etc/apache2/sites-available/default文件开始:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

这是我的半字节站点同一目录中的代码:

<VirtualHost *:80>
    ServerName nibble.local
    DocumentRoot /var/www/nibble_framework/web/
    <Directory /var/www/nibble_framework/web/>
        AllowOverride All
        Options Indexes FollowSymLinks MultiViews
        Allow from All
    </Directory>
    RewriteLog /var/www/rewrite.log
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

我已经使用 a2ensite 启用了该站点并重新启动了 apache。我还将该网站添加到我的主机文件中:

  127.0.0.1  nibble.local

我已经使用 a2enmod 启用了 mod 重写,并多次重新启动/重新加载 apache。

  $ a2enmod rewrite 
  Module rewrite already enabled

我的.htaccess文件已/var/www/nibble_framework/web/.htaccess包含以下代码:

  Options +FollowSymLinks +ExecCGI

  <IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^([^/]*)/?.*$ - [E=FILE:%{DOCUMENT_ROOT}/$1.php]

  RewriteCond %{ENV:FILE} !^$
  RewriteCond %{ENV:FILE} -f
  RewriteRule ^([^/]*)/?(.*)$ $1.php?url=$2 [QSA,L]

  RewriteCond %{ENV:FILE} !^$
  RewriteCond %{ENV:FILE} !-f
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
  </IfModule>

当我执行 a 时print_r($_REQUEST),即使 url 由长字符串填充,它也始终是一个空数组。

有谁知道为什么这可能会失败?

编辑:

Apache2访问日志:

~$ tail -f /var/log/apache2/access.log
::1 - - [16/Aug/2011:07:32:39 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:39 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:39 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"

答案1

我怀疑您的 VirtualHost 没有得到正确处理,这将不会为获取请求设置 AllowOverride。首先你的/etc/hosts文件应该是这样的..

127.0.0.1   localhost   localhost.localdomain
127.0.1.1   nibble.local

其次,您必须为基于名称的虚拟主机设置该接口。您没有指定当前是否已设置。通常它在主 apache 配置中设置,我猜 ubuntu/debian 已经找到了该文件/etc/apache2/apache2.conf。确保该行已设置在该文件中的某个位置,

NameVirtualHost *:80

完成这些更改后,重新启动 apache

sudo /etc/init.d/apache2 restart

不,测试一下,记住您只在本地设置主机条目。因此,只有在本地主机请求时,这才会正确工作。如果您遇到困难,或者不起作用,请发布相关行/var/log/apache2/error.log

答案2

指定 AccessFileName 指令以使用.htaccess文件。

AccessFileName .htaccess

启用重写引擎,然后重新启动服务。

sudo a2enmod rewrite 

相关内容