配置 MAMP 以将 Htdocs 中的每个目录视为 Apache 中的根目录 mod_redirect

Configure MAMP to treat each directory in Htdocs as Root in Apache mod_redirect

问题是当使用MAMP进行本地开发时,.htaccess文件需要有所不同,RewriteBase需要指定特定站点的子目录(如图here on SO).

有没有办法配置 MAMP MAMP/conf/apachehttpd.conf 以便每个虚拟站点都有自己的 "root"?

更新

获得有关虚拟主机的线索后:

已更新 /etc/hosts 文件以包含:

127.0.0.1       ClientSite.localhost

取消注释行:

`#Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf` 

/Applications/MAMP/conf/apache/httpd.conf.

/Users/myname/Sites/ 中有一个名为 ClientSite 的目录。

这是/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf内容:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    ServerName localhost
    ServerAlias *.localhost
    VirtualDocumentRoot /Users/myname/Sites/%0

    RewriteLogLevel 3
    RewriteLog "/Applications/MAMP/logs/rewrite.log"

    <Directory /Users/myname/Sites>
       Options All
       AllowOverride All
       Order allow,deny
       Allow from all
    </Directory>
</VirtualHost>

重新启动 MAMP 服务器(甚至 运行 dscacheutil -flushcache)。

当浏览器指向 ClientSite.localhost 它 returns a 404: The requested URL / was not found on this server.

so that each virtual site gets it's own "root"?

您需要使用VirtualDocumentRoot

这就是我在 /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf 文件中的 MAMP 上使用它的方式:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    ServerName localhost
    ServerAlias *.localhost
    VirtualDocumentRoot /Users/admin/htdocs/%0

    RewriteLogLevel 3
    RewriteLog "/Applications/MAMP/logs/rewrite.log"

    <Directory /Users/admin/htdocs>
       Options All
       AllowOverride All
       Order allow,deny
       Allow from all
    </Directory>
</VirtualHost>

注意 VirtualDocumentRoot /Users/admin/htdocs/%0 指令。这使得每个虚拟站点的根目录为:

VirtualDocumentRoot /Users/admin/htdocs/localhost
VirtualDocumentRoot /Users/admin/htdocs/dev.localhost
VirtualDocumentRoot /Users/admin/htdocs/client2.localhost

等等

然后只需在 /Users/admin/htdocs/ 中为每个如上命名的站点创建一个目录,例如:

dev.localhost
client2.localhost

在此过程中删除(或重命名)任何 .htaccess 文件 - 一旦网站确认可通过 url 访问,例如:http://client2.localhost.htaccess 文件应正常运行不出所料。

还要确保在 /etc/hosts 文件中有如下条目:

127.0.0.1    client2.localhost

每个 URL 有问题。