在 <username>OSX 上的用户//站点目录中mod_rewrite



对此可能有一个相当简单的解决方案,但我已经搜索了几天,却找不到,太。。。

我正在一个操作系统X盒子(Lion)上开发一个网站。工作网站位于/Users/username/Sites,我已将该目录添加到/etc/apache2/Users/username.conf。我可以毫无问题地查看页面。

但是。。。我正在使用CodeIgniter,我想从URL中删除index.php。对于mod_rewrite来说,这应该是一项相当简单的工作。我在目录中添加了一个.htaccess文件(并在上面的conf文件中设置了AllowOverrideAll)。在谷歌上搜索后,我发现我需要Options+FollowSymLinks集(我在.htaccess文件中做了)。

问题是,它似乎将URL从localhost/~username/重写为/Users/username/Sites。问题是,在这种形式下,浏览器只是试图下载index.php文件,而不是执行它。当链接为/Users//Sites/index.php/controller/function时,情况会变得更糟,因为这些文件不存在。。。CodeIgniter旨在接管index.php,但前提是它已被执行。

因此,我无法删除Options+FollowSymLinks,因为这会产生禁止访问的错误,出于上述原因,我不能将其保留。

有趣的是,将完全相同的网站放在/Library/WebServer/Documents目录中效果很好。OS X似乎并不介意FollowSymLinks指向该目录,可能是因为它在httpd.conf 中被设置为DocumentRoot

我的httpd.conf是stock Lion,除了/Library/Webserver/Documents上的AllowOverride All。mod_rewrite已启用。

我的用户名.conf是

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

我在站点目录中的.htaccess文件是

Options +FollowSymLinks
RewriteEngine on
RewriteCond $1 !^(index.php|static|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

很明显,我可以在/Library/WebServer/Documents上进行开发,但我更喜欢在本地文件中进行开发。

CodeIgniter网站上有一个关于mod重写的优秀wiki页面,它涵盖了您需要对.htaccess文件和CodeIgnitor文件本身进行的所有更改。

很容易忘记更改配置文件中的值,如中的index_page

$config['index_page'] = "index.php";

$config['index_page'] = "";

该wiki页面上显示的示例.htaccess文件是(我已经删除了注释):

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

如果您发现需要,只需将AddType和Options属性添加到其中即可。

这里的一些技巧可能会使用完整的

AddType application/x-httpd-php .php
Options +FollowSymLinks
RewriteEngine   on
RewriteBase  /Users/username/Sites/
RewriteEngine on
RewriteCond $1 !^(index.php|static|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

还可以重写日志。但是建议你删除这些线路,在你修复所有之后

 RewriteLog "/var/log/httpd/rewrite_log" 
 RewriteLogLevel 9

最新更新