2015-11-26 39 views
12

Próbuję hostować witrynę WordPress w projekcie Laravel (5.1). Mam następującą strukturę (część z nich została usunięta)Laravel i Wordpress na tym samym serwerze/domenie

├── app 
├── config 
├── public 
│   ├── index.php 
│   ├── wordpress -> ../wordpress 
│   └── .htaccess 
├── resources 
├── storage 
├── vendor 
└── wordpress 
    ├── index.php 
    ├── wp-admin 
    ├── wp-config.php 
    ├── wp-includes 
   └── .htaccess 

Główny katalog dokumentów vhost jest publiczny.

Wordpress powinien złapać wszystko, co spada przez .htaccess. Ale na przykład/login powinien przejść do laravel. Kiedy mój projekt rośnie, zamierzam dodać więcej reguł, aby wychwytywać żądania dla Laravel. Mam następujący plik .htaccess w katalogu/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> 

Ale kiedy robię żądanie/zalogować się i nadal skończyć z strony WordPress. Oto część logu:

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] 

Wygląda na to, że przepisanie nie kończy się na znaczniku [L].

+0

Powinieneś sprawdzić Themosis: http://framework.themosis.com/ –

+0

Podczas gdy jest to niezła sugestia, nie jest to realistyczne rozwiązanie. Część Laravel jest już w fazie rozwoju. –

Odpowiedz

0

Możliwe jest dodanie warunku przepisywania do domyślnego pliku Laravel .htaccess, który umożliwi ignorowanie wszystkich żądań do podkatalogu (/ wordpress) przez 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> 
+0

To nie pomogłoby w mojej sprawie. Ponieważ adres url nie powinien zawierać/wordpress. Na przykład {url}/login i {url}/portal powinny być obsługiwane przez laravel , podczas gdy {url}/info i {url}/blog powinny być obsługiwane przez Wordpress. –

2

Jak zapytałem w komentarzu, oto odpowiedź:

Jak widać w dziennikach pierwszy warunek nie pasuje:

applying pattern '^/login' to uri 'login/' 

login/ nie rozpocznie z /

Więc trzeba zmienić regułę

RewriteRule "^login/" "index.php" [L]