Это на самом деле не моя область знаний, но я только что следовал руководству по использованию vhost_alias_module
, чтобы избежать необходимости создавать vhosts для каждого отдельного проекта, вместо этого указывая каждый запрос на http://*.test
на /Users/powerbuoy/Sites/$DOMAIN_NAME
: https://www.sitepoint.com/set-automatic-virtual-hosts-nginx-apache/
Было удивительно легко заставить его работать, вот как выглядит мой httpd-vhosts.conf:
UseCanonicalName Off
<VirtualHost *:80>
ServerName vhosts.fqdn # NOTE: This wasn't explained in the guide so I left it as it was there, doesn't seem to make a difference what it is?
ServerAlias *.test
ServerAdmin webmaster@localhost
VirtualDocumentRoot /Users/powerbuoy/Sites/%1
<Directory ~ "/Users/powerbuoy/Sites/.*">
# Not sure all of these are needed..?
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
ErrorLog "/private/var/log/apache2/sleek-error"
CustomLog "/private/var/log/apache2/sleek-access" common
</VirtualHost>
Чтобы не добавлять каждое доменное имя в/etc/hosts
Я следовал другому руководству: https://passingcuriosity.com/2013/dnsmasq-dev-osx/, где все, что я сделал, было brew install dnsmasq
, добавьте одну строку к /usr/local/etc/dnsmasq.conf
: address=/test/127.0.0.1
и, наконец, создайте файл в /etc/resolver/test
, содержащий nameserver 127.0.0.1
.
Это тоже работало нормально после перезагрузки. Однако , после настройки всех моих сайтов, установки WordPress и т. Д., Я понимаю, что mod_rewrite
перестал работать: / Теперь я точно не знаю, где что-то идет не так, но я уверен на 100%mod_rewrite включен (phpinfo()
, и больше рассказал мне об этом).
Я понимаю, что когда вы используете VirtualDocumentRoot
, переменная DOCUMENT_ROOT
фактически не будет корнем сайта? Но действительно ли это повлияет на mod_rewrite
?
Вот мой .htaccess
(это стандартный WordPress):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Как я уже говорил, доступ к sitename.test
работает нормально, доступ к sitename.test/any-url/
приводит к немедленному 404.
Что здесь может быть не так?
Редактировать: я на macOS Catalina 10.15.1 кстати. Использование Apache / 2.4.41 (поставляется с предустановленной версией)
Edit2: я попытался положить кучу мусора в мой файл .htaccess, чтобы посмотреть, используется ли он вообще, но ничего не произошло, поэтому он выглядит как .htaccessфайлы даже не читаются.
Edit3: я заметил это внутри etc/apache2/httpd.conf
:
#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
AllowOverride none
Require all denied
</Directory>
Изменение его на AllowOverride all
решает мою проблему. Я уверен, что это ужасная идея изменить это, поэтому я хотел бы знать, есть ли лучшее решение.