Apache mod_rewrite 规则不适用于动态虚拟主机和 php-fpm

Apache mod_rewrite 规则不适用于动态虚拟主机和 php-fpm

我使用此配置文件创建了一个动态虚拟主机:

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 中启用重写模块。

看看这个:https://www.digitalocean.com/community/tutorials/how-to-set-up-mod_rewrite-for-apache-on-ubuntu-14-04

拥有模块后,您将需要类似这样的东西(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 noneAllowOverride All

相关内容