Apache2 不显示一个目录,导致 .htaccess 规则失败。出了什么问题?

Apache2 不显示一个目录,导致 .htaccess 规则失败。出了什么问题?

我在 Ubunto Natty 上的 Apache2 上的 VirtualHost 中安装了 CodeIgniter,设置如下:

/application
/system
...
/www/index.php

这是我的 .htaccess,位于 /:

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /

        RewriteCond %{REQUEST_URI} ^system.*
        RewriteRule ^(.*)$ /www/index.php?/$1 [L]

        RewriteCond %{REQUEST_URI} ^application.*
        RewriteRule ^(.*)$ /www/index.php?/$1 [L]

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /www/index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
        ErrorDocument 404 /www/index.php
</IfModule>

当我访问该网站时,我看到的是附图: Apache 目录列表,其中没有 www 文件夹

这是我ls -al在 / 中运行时看到的内容:

total 44
drwxr-xr-x  8 admin admin 4096 2011-09-06 00:35 .
drwxr-xr-x  3 admin admin 4096 2011-09-04 06:36 ..
drwxr-xr-x 12 admin admin 4096 2011-09-04 06:29 application
-rw-r--r--  1 admin admin   94 2011-09-05 18:53 .hg_archival.txt
-rw-r--r--  1 admin admin  431 2011-09-06 00:35 .htaccess
-rw-r--r--  1 admin admin 2496 2011-09-05 18:53 license.txt
drwxr-xr-x  2 admin admin 4096 2011-09-06 00:32 logs
drwxr-xr-x 10 admin admin 4096 2011-09-04 06:29 system
drwxr-xr-x  2 admin admin 4096 2011-09-06 00:30 test
drwxr-xr-x 11 admin admin 4096 2011-09-04 06:29 user_guide
drwxr-xr-x  5 admin admin 4096 2011-09-04 06:29 www

我需要进行哪些更改才能使我的 www 文件夹出现,从而使我的 ReWriteRule 能够正常工作,或者这甚至是问题所在?

PS 应该提到,我的文件在被推送到服务器上其他地方的存储库后,通过 post-receive Git 钩子到达此文件夹。我认为这并不重要,因为似乎每个文件都会到达,但我会提到这一点。

答案1

您不想将 INDEX 页面设置为 404 页面,否则它将无法加载。很简单。试试这个:

如果您想要进行 www 重定向,请仅使用您的外部 IP 创建一个 v-host。

#vHosts Config:

NameVirtualHost *:80

<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
<Directory "C:/xampp/htroot">
    AllowOverride All
    Options Indexes FollowSymLinks Includes ExecCGI
    Order allow,deny
    Allow from all
</Directory>

否则,请将其放入网站根目录中的 .htaccess 文件中

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

并确保您允许索引和 goody-two-shoes 选项指令。这应该可以解决问题。

编辑:您几乎可以删除“ifmodule”标签。也试试这种方法。至少解释一下您的问题是什么,这有点乏味。

相关内容