我使用此配置文件创建了一个动态虚拟主机:
UseCanonicalName Off
<VirtualHost *:80>
ServerName %1.dev
ServerAlias *.%1.dev
ServerAdmin daniel@localhost
VirtualDocumentRoot /home/daniel/public_html/%1
LogLevel error rewrite:trace8 proxy:trace2
ErrorLog /home/daniel/public_html/error.log
CustomLog /home/daniel/public_html/access.log combined
<Directory ~ "/home/daniel/public_html/.*">
Options Indexes FollowSymlinks Multiviews
AllowOverride All
Require all granted
DirectoryIndex index.php index.html
RewriteEngine On
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost:9000"
</FilesMatch>
</Directory>
</VirtualHost>
这对于 php 脚本来说运行良好,但我无法让它与 SEF URL(例如 WordPress 使用的 URL)一起工作(例如 http//mysite.dev/blog 返回 404)。
对此有什么想法吗?
答案1
为了使其工作,您需要在 Apache 中启用重写模块。
拥有模块后,您将需要类似这样的东西(wordpress 示例):
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
它应该放在 .htacccess 文件或 vhost 文件中。
答案2
检查您的 Apache 配置文件并启用全部重写。
打开终端并写入:nano/etc/apache2/apache2.conf
找到这些行并写下以下代码:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
改成。AllowOverride none
AllowOverride All