使用Lion上〜/ Sites中的.htaccess文件启用URL重写(mod_rewrite)


13

我无法让mod_rewrite在Lion上运行。我正在使用.htaccess文件在〜/ Site中本地开发许多网站。我使用的是10.7.3,除了在httpd.conf中启用PHP(有效)外,我没有碰过任何配置文件。

我知道这里至少有两个问题,但是那里详细介绍的解决方案不起作用。我在网上也找不到其他解决方案。我一定在做一些愚蠢的事情或忽略了某些事情,否则我可能会发疯,但这是行不通的。

我已经尝试了所有常用的东西:

  1. 在中/private/etc/apache2/users/<myusername>.conf,更改AllowOverride NoneAllowOverride All并重新启动Web服务器

  2. 此外,在中/private/etc/apache2/httpd.conf,将的任何/所有出现更改AllowOverride NoneAllowOverride All-我已经在所有找到这些指令的地方进行了尝试

  3. 基本上尝试Options行上方/下方的AllowOverride行的所有可能值组合,包括以下值:Indexes MultiViews FollowSymLinks All

当然,在进行此类更改后,请务必重新启动Web服务器。这些都不起作用。我所有干净的网址都无法使用;我得到404-未找到。Apache的错误日志仅显示“文件不存在:”错误。因此,看来mod_rewrite模块根本无法正常工作。

我确保将mod_rewrite加载到httpd.conf中。在Lion安装中,默认情况下是这样。

疯狂的是,一切运转良好,直到我迁移到运行Lion的新计算机上。就是说,我排除了.htaccess文件中的错误,因为我知道它曾经起作用。另外,如果.htaccess中存在错误,我将从Apache的error_log中的mod_rewrite模块中获取某种错误消息,至少告诉我该模块本身正在被调用。但是,这没有发生。

我在俯视什么吗?我是否需要在其他地方更改配置设置?我是否需要更改PHP的配置?为什么这些说明(例如如何在MacOSX Lion上激活mod_rewrite如何在Mac OS X上使mod_rewrite起作用)对其他人有效,但对我却不起作用?:)

我已经在此上浪费了几个小时。任何帮助将不胜感激。


顺便说一句,我不想​​使用MAMP。我以前使用过MAMP,但它与我系统中已经存在的MySQL配合不好。这将用另一种头痛代替一种头痛,所以不用了,谢谢:)
Niels Heidenreich 2012年

顺便说一句,我使用的是标准OS X Lion,而不是Lion Server。
Niels Heidenreich '04

这并不能解决问题,但是要解决Mac本地环境来进行Web开发的另一种方法是使用Vagrant之类的工具,它可以让您轻松地设置和管理虚拟机配置。
Dan J

Answers:


12

您应该确保在/etc/apache2/users/username.conf中具有以下内容:

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

FollowSymlinks和AllowOverride在这里至关重要。当您在问题中同时暗示这两个问题时,也许您没有正确地串联配置它们。

确保在httpd.conf /private/etc/apache2/extra/httpd-userdir.conf中也包含该文件。默认情况下。

进行任何修改后,请重新启动Web服务器以使更改生效。

如果仍然有问题,则可能是您的实际重写规则存在问题。您之前是否也在.htaccess上下文中使用它们?请注意,在.htaccess中,重写规则regex与请求URI匹配,没有前导斜杠,并且始终相对于.htaccess所在的目录,而在全局httpd.conf中,URI必须与前导斜杠匹配,并且相对于网络根目录。因为假定您的.htaccess位于〜/ Sites的子目录中,所以重写规则的行为可能不同于.htaccess位于(虚拟)主机的Web根目录中的行为。

要调试mod_rewrite,可以启用重写日志记录。您应该在/etc/apache2/httpd.conf中启用它:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

谢谢格里。是的,我尝试过;再试一次 不幸的是无法正常工作。我没有更改.htaccess,它和以前一样在〜/ Sites /…中。这太令人沮丧了:(
Niels Heidenreich 2012年

尝试启用重写日志记录,就像我在上面修改的那样。
格里

好吧,看起来好像不是mod_rewrite的问题。完全忽略了.htaccess文件。我可以将任何垃圾放入其中,但不会收到错误消息。因此Apache不会加载它。我检查了权限,它们没问题(文件是世界可读的)。我尝试使其可执行,没有任何变化。
Niels Heidenreich'4

如果我将.htaccess放入/ Library / WebServer / Documents并打开“ localhost ”进行测试,则可以正常工作。它只是在“〜/站点”中不起作用。
Niels Heidenreich'4

我做了一些疯狂的事情,并用登录名“ testitester”创建了第二个用户帐户。我在该用户的.conf中将AllowOverride设置为All。我在该用户的Sites文件夹中放置了一个包含垃圾邮件的.htaccess文件。如果我转到localhost /〜testitester,则会收到500错误,如预期的那样。
Niels Heidenreich'4

1

添加选项+ FollowSymLinks对我来说效果很好

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

它在做什么Options +FollowSymLinks?我只添加对我
有用的

1

我遇到了类似的问题,当我的.htaccess文件位于正确设置的VirtualHost下〜/ Sites目录内的子文件夹中时,我的.htaccess文件被完全忽略了。

在花了最后一个小时在不同的地方使用不同的配置文件并设置了AllowOverride All之后,我终于发现.htaccess文件虽然看起来像Finder中的.htaccess文件,但实际上是带有.htaccess文件的.htaccess文件。扩展程序已隐藏。

要检查和更改.htaccess文件,请右键单击该文件并选择“获取信息”,然后确保从末尾删除所有开头的扩展名,例如我拥有的扩展名:

现在就可以了!


1

.htaccess条目下方为我修复

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

将.htaccess放入/ Library / WebServer / Documents并打开“ localhost /”;测试它,按预期方式工作。它只是在“〜/站点”中不起作用。感谢Niels Heidenreich!


-1

当您键入时:/ Users / username / app_name

/表示Web服务器的根目录:

“本地主机/”

如果您在重写中使用/〜username / app_name,它应该可以工作。


1
开头的/路径始终是Apache的绝对路径,请参见http.conf(<Directory "/Library/WebServer/Documents">)中的Web服务器根目录定义
nohillside
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.