mod_rewrite не работает с vhost_alias_module & dnsmasq - PullRequest
0 голосов
/ 08 ноября 2019

Это на самом деле не моя область знаний, но я только что следовал руководству по использованию 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 решает мою проблему. Я уверен, что это ужасная идея изменить это, поэтому я хотел бы знать, есть ли лучшее решение.

...