Luk*_*uke 5 htaccess apache-httpd
我一直试图让我的.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>
Run Code Online (Sandbox Code Playgroud)
这是我的 nibble 站点在同一目录中的代码:
<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>
Run Code Online (Sandbox Code Playgroud)
我已经使用 a2ensite 启用了该站点并重新启动了 apache。我还将该站点添加到我的主机文件中:
127.0.0.1 nibble.local
Run Code Online (Sandbox Code Playgroud)
我已经使用 a2enmod 启用了 mod 重写并多次重新启动/重新加载 apache。
$ a2enmod rewrite
Module rewrite already enabled
Run Code Online (Sandbox Code Playgroud)
我的.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>
Run Code Online (Sandbox Code Playgroud)
当我执行 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)"
Run Code Online (Sandbox Code Playgroud)
我怀疑您的 VirtualHost 没有得到正确处理,这将不会为获取请求设置 AllowOverride。首先你的/etc/hosts
文件应该是这样的..
127.0.0.1 localhost localhost.localdomain
127.0.1.1 nibble.local
Run Code Online (Sandbox Code Playgroud)
其次,您必须为基于名称的虚拟主机设置该接口。您没有指定当前是否已设置。通常它在主 apache 配置中设置,我猜 ubuntu/debian 已经找到了该文件/etc/apache2/apache2.conf
。确保该行已设置在该文件中的某个位置,
NameVirtualHost *:80
Run Code Online (Sandbox Code Playgroud)
完成这些更改后,重新启动 apache
sudo /etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)
不,测试一下,记住您只在本地设置主机条目。因此,只有在本地主机请求时,这才会正确工作。如果您遇到困难,或者不起作用,请发布相关行/var/log/apache2/error.log
归档时间: |
|
查看次数: |
10435 次 |
最近记录: |