Ответ 1
Закончилось задание того же вопроса в ServerFault. Там я получил ответ. Связывание здесь здесь для повторения:
https://serverfault.com/questions/739728/laravel-and-wordpress-on-same-server-domain
Я пытаюсь разместить сайт WordPress внутри проекта Laravel (5.1). У меня есть следующая структура (урезанная часть)
├── app
├── config
├── public
│ ├── index.php
│ ├── wordpress -> ../wordpress
│ └── .htaccess
├── resources
├── storage
├── vendor
└── wordpress
├── index.php
├── wp-admin
├── wp-config.php
├── wp-includes
└── .htaccess
Приветствующий корень документа является общедоступным.
Wordpress должен поймать все, что попадает через .htaccess. Но, например, /login должен идти в laravel. Когда мой проект растет, я намереваюсь добавить больше правил, чтобы ловить запросы для Laravel. У меня есть следующий файл .htaccess в /public:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/login" "index.php" [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^(.*)$" "wordpress/$1" [L]
</IfModule>
Но когда я делаю запрос/логин, я все равно заканчиваю страницу wordpress. Вот часть журнала:
add path info postfix: /var/www/public/login -> /var/www/public/login/
strip per-dir prefix: /var/www/public/login/ -> login/
applying pattern '^/login' to uri 'login/'
add path info postfix: /var/www/public/login -> /var/www/public/login/
strip per-dir prefix: /var/www/public/login/ -> login/
applying pattern '^(.*)$' to uri 'login/'
RewriteCond: input='/var/www/public/login' pattern='!-d' => matched
RewriteCond: input='/var/www/public/login' pattern='!-f' => matched
rewrite 'login/' -> 'wordpress/login/'
add per-dir prefix: wordpress/login/ -> /var/www/public/wordpress/login/
strip document_root prefix: /var/www/public/wordpress/login/ -> /wordpress/login/
internal redirect with /wordpress/login/ [INTERNAL REDIRECT]
Кажется, что переписывание не останавливается на значке [L].
Закончилось задание того же вопроса в ServerFault. Там я получил ответ. Связывание здесь здесь для повторения:
https://serverfault.com/questions/739728/laravel-and-wordpress-on-same-server-domain
Как указано в комментарии, вот ответ:
Как вы можете видеть в ваших журналах, первое условие не соответствовало:
applying pattern '^/login' to uri 'login/'
login/
не начинается с /
Итак, вам нужно изменить свое правило на
RewriteRule "^login/" "index.php" [L]
Можно добавить условие перезаписи к файлу Laravel .htaccess
по умолчанию, который позволит игнорировать все запросы в подкаталог (/wordpress) Laravel.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Ignore Wordpress directory
RewriteCond $1 !^(wordpress)
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>