我在 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>
当我访问该网站时,我看到的是附图:
这是我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”标签。也试试这种方法。至少解释一下您的问题是什么,这有点乏味。