Правила 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-скриптами, но я не могу заставить его работать с URL-адресами SEF, такими как те, которые используются WordPress (например, http // mysite.dev / blog return 404).

Любые идеи об этом?

0
задан 24 July 2017 в 09:46

4 ответа

Проверьте конфигурационный файл apache и включите переписывание для всех.

Откройте терминал и напишите: nano /etc/apache2/apache2.conf

Найдите эти строки и напишите именно этот код :

<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>

Изменить AllowOverride none на AllowOverride All.

0
ответ дан 18 July 2018 в 09:48

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

0
ответ дан 18 July 2018 в 09:48

Проверьте конфигурационный файл apache и включите переписывание для всех.

Откройте терминал и напишите: nano /etc/apache2/apache2.conf

Найдите эти строки и напишите именно этот код :

<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>

Изменить AllowOverride none на AllowOverride All.

0
ответ дан 24 July 2018 в 19:26

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

0
ответ дан 24 July 2018 в 19:26
  • 1
    Да, я пробовал это. Это то, что я имею в моем файле .htaccess: # BEGIN WordPress & lt; IfModule mod_rewrite.c & gt; RewriteEngine On RewriteBase / RewriteRule ^ index \ .php $ - [L] RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule. /index.php [L] & lt; / IfModule & gt; # END WordPress Проблема заключается в том, что это, по-видимому, говорит php-fpm о поиске php-скрипта в каталоге / var / www / html (глобальный DOCUMENT_ROOT от Apache), вместо / home / daniel / public_html / my-wp-site – danielperaza 24 July 2017 в 22:24

Другие вопросы по тегам:

Похожие вопросы: