2011-10-29 27 views
8

工作正确的.htaccess重写规则我有我的Mac书临豹一个网站项目,我使用内置的Apache2和PHP。我已经在httpd.conf和user.conf中配置了使用htaccess的配置。像做了更改:无法在Mac

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so 

<Directory > 
    AllowOverride All 
</Directory> 

问题是,当我想打开一个网站,如 本地主机/〜用户名/网站/网站/的index.php /欢迎,index.php文件做一些操作和找到正确的控制器和正确的页面。

但是当我尝试喜欢的网站进入网站/欢迎阿帕奇给了我以下错误:

未找到

请求的URL的用户/用户名/网站/网站/ index.php文件/欢迎是在这台服务器上找到。

问题是阿帕奇得到这个喜欢这的确是一个文件和错误陈述给它在文件系统的方式,但这一要求必须取出,而不是到index.php。

我的.htaccess文件看起来像这样

<ifModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L] 
</ifModule> 

让我困扰,此配置适用于Linux和Windows,但在Mac上不工作。我觉得注定:)

+0

你能确定重写模块已被正确启用? – Phil

+0

是的,我可以看到它们在phpinfo()的加载模块部分; – LostMohican

+0

你会考虑改变你接受的答案吗?你接受的那个实际上是不正确的。 @tong的回答是正确的。 – spikyjt

回答

15

我遇到了同样的问题呢! 'DocumentRoot'在Lion中不适用于我。

但这个工程:

RewriteEngine On 

RewriteBase /~username/YOURPath 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L] 
+1

太棒了!我花了三个小时试图弄清楚这一点。谢谢! –

+1

我面临同样的问题,但它节省了我的时间+1 – imsyedahmed

+2

这应该是公认的答案,因为它是正确的 - 应始终设置RewriteBase。修改DocumentRoot是一种破解(在配置良好的服务器上使用.htaccess是不可能的)。 – spikyjt

4

你需要下面的行添加到您的.htaccess文件:

DocumentRoot "/~username/site/" 
5

在Mac OSX山狮,确保AllowOverride设置为All上的目录/

<Directory /> 
    Options FollowSymLinks 
    AllowOverride All 
    Order deny,allow 
    Deny from all 
</Directory> 

您的文档根路径的根目录:

<Directory "/Library/WebServer/Documents"> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
</Directory> 

也确保FollowSymLinks包含在Options中。

,如果你的“的index.php少漂亮网址”是不是在你的DocumentRoot然后添加以下RewriteBase目录在哪里你的index.php存在.htaccess文件,如下面的例子:

RewriteBase /~username/site/site/ 

如果你想在.htaccess文件名更改为其他类似.aclhtaccess.txt,取消对你的httpd.conf

# Various default settings 
Include /private/etc/apache2/extra/httpd-default.conf 

下面一行,在改变在extra/httpd-default.conf文件中指示你喜欢的任何东西。例如,如果你想改变.htaccess文件htaccess.txt将其更改为:

AccessFileName htaccess.txt 

保存,重新启动OSX山狮您的Apache Web服务器,并且希望你是好去。 希望这有助于。

2

我有同样的问题,但解决方案上面并没有为我工作,

从一开始就删除斜线奏效了(我猜是因为我的浏览器已经正确的用户下运行)。

所以重写规则^注册/register.php

成了重写规则^注册register.php

驱使我坚果!顺便说一句我在Mac OS 10.8上运行xampp(apache 2)。

0

如果我将.htaccess放入/ Library/WebServer/Documents并打开“localhost /”;为了测试它,这按预期工作。它只是在“〜/站点”中不起作用。

1

我有同样的问题,但对我来说,问题是mod_rewrite未启用。

我不得不取消注释在/etc/apache2/httpd.conf文件这两行:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so 
LoadModule php7_module  libexec/apache2/libphp7.so 

这之后,没有必要使用RewriteBase