我的mac book pro leopard上有一个网站项目,我使用内置的apache2和php。我在httpd.conf和user.conf中都进行了配置以使用htaccess。完成的更改如下:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
<Directory >
AllowOverride All
</Directory>
问题是当我想打开像这样的网站时 localhost / ~username / site / site / index.php / welcome,index.php执行一些操作并找到正确的控制器和正确的页面。
但是当我尝试进入像site / welcome apache这样的网站时,会出现以下错误:
未找到
在此服务器上找不到请求的URL Users / username / Sites / site / index.php / welcome。
问题是apache得到这个就像它确实是一个文件而错误语句以文件系统的方式提供它,但是这个请求必须被提取到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 :(得分:15)
我也遇到了同样的问题! “DocumentRoot”在Lion中对我不起作用。
但这有效:
RewriteEngine On
RewriteBase /~username/YOURPath
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]
答案 1 :(得分:6)
在Mac OSX Mountain Lion上,确保目录上的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-less漂亮URL”不在您的DocumentRoot上,那么在您的index.php所在的.htaccess文件中添加以下RewriteBase目录,如下例所示:
RewriteBase /~username/site/site/
如果您想将.htaccess
文件名更改为.acl
或htaccess.txt
之类的其他内容,请取消注释httpd.conf上的以下行
# Various default settings
Include /private/etc/apache2/extra/httpd-default.conf
并将.htaccess
指令中的AccessFileName
更改为extra/httpd-default.conf
文件中您喜欢的任何内容。例如,如果您要将.htaccess
文件更改为htaccess.txt
,请将其更改为:
AccessFileName htaccess.txt
保存它们,在OSX Mountain Lion上重启你的apache web服务器,并希望你好好去。 希望这会有所帮助。
答案 2 :(得分:4)
您需要将以下行添加到.htaccess文件中:
DocumentRoot "/~username/site/"
答案 3 :(得分:2)
我遇到了同样的问题,但上面的解决方案对我不起作用,
从头开始删除斜杠就行了(我想因为我的浏览器已在正确的用户下运行)。
所以RewriteRule ^注册/register.php
成为RewriteRule ^注册register.php
这让我疯了!顺便说一下,我在mac os 10.8上运行xampp(apache 2)。
答案 4 :(得分:1)
我遇到了同样的问题,但对我来说问题是mod_rewrite
未启用。
我必须在/etc/apache2/httpd.conf文件中取消注释这两行:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php7_module libexec/apache2/libphp7.so
之后,无需使用RewriteBase
等。
答案 5 :(得分:0)
如果我将.htaccess放入/ Library / WebServer / Documents并打开“localhost /”;测试它,这按预期工作。它只是在“〜/ Sites”中不起作用。