2014-05-14 11 views
6

मेरे पास नर्गिनक्स पर चलने वाली एक लार्वा साइट है, और यह ठीक है।सुंदर permalinks (एसईओ अनुकूल यूआरएल) के साथ Nginx पर Laravel के साथ वर्डप्रेस स्थापित करने के लिए कैसे?

ऐसा लगता है कि एक सामान्य फ़ोल्डर संरचना है: जहां Laravel index.php है

/app 
/public 
/vendor 
... 

/public फ़ोल्डर है।

मैंने वर्डप्रेस को /public/blog पर स्थापित किया है क्योंकि मैं चाहता हूं कि मेरा ब्लॉग mywebsite.org/blog पर दिखाई दे।

ब्लॉग वर्तमान में ठीक काम करता है अगर मैं /blog/wp-admin/options-permalink.php पर परिभाषित परमालिंक सेटिंग्स को "डिफ़ॉल्ट" पर सेट करता हूं (जिसका अर्थ है पदों के लिए यूआरएल /blog/?p=123 जैसा दिखता है)। यदि मैं पर्मलिंक सेटिंग्स को /blog/%postname%/ पर बदलता हूं, तो मैं पोस्ट नहीं देख सकता (मुझे लारवेल 404 पृष्ठ मिलता है)।

मैं निश्चित रूप से चाहता हूं कि मेरे ब्लॉग पोस्ट में एसईओ-अनुकूल यूआरएल (सुंदर परमालिंक) हों।

मेरे वर्तमान Nginx config है:

server { 
    #This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf and seemed to be necessary to get Laravel working. 
    server_name mysite.local; 

    # The location of our project's public directory. 
    root F:/code/mysite/public/; 

    # Point index to the Laravel front controller. 
    index   index.php; 

    location/{ 
     # URLs to attempt, including pretty ones. 
     try_files $uri $uri/ /index.php?$query_string; 
    } 

    # Remove trailing slash to please routing system. 
    if (!-d $request_filename) { 
      rewrite  ^/(.+)/$ /$1 permanent; 
    } 

    # Yoast WordPress SEO plugin says to add these 2 rewrites: 
    rewrite ^/blog/sitemap_index\.xml$ /blog/index.php?sitemap=1 last; 
    rewrite ^/blog/([^/]+?)-sitemap([0-9]+)?\.xml$ /blog/index.php?sitemap=$1&sitemap_n=$2 last; 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9123 
    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9123; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 

    location ~* \.(css|js|gif|jpe?g|png)$ { 
     #images, CSS, and JS have 1 week expiration: http://aspyct.org/blog/2012/08/20/setting-up-http-cache-and-gzip-with-nginx/ See also: http://serverfault.com/questions/339240/chromium-audit-says-its-not-caching-static-content-yet-headers-are-set-who-i 
     expires 168h; 
     add_header Pragma public; 
     add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    } 

} 

मैं घंटे बिताए हैं अन्य उत्तर (नीचे सूचीबद्ध) की समीक्षा करने और पता लगा नहीं किया है कि यह कैसे काम कर पाने के लिए।

सुझाव?

पी.एस. मैं लचीला हूं जहां मैं वर्डप्रेस फाइलों को स्थापित करता हूं (उदा। /public/blog पर या इसे /blog या /wordpress पर ले जाएं)। अपने / स्थान में laravel को

+0

हे साथी, हथियारों के लिए अपने कॉल करने के लिए यहाँ का जवाब दे :) के रूप में अपने ब्लॉग जहाँ आप इस लिंक पोस्ट पर चर्चा की, आप वर्डप्रेस एक स्तर ऊपर ले जाकर की कोशिश की और के लिए एक स्थान को जोड़ने जैसा कि यहां वर्णित है: http://tom.londondroids.com/2011/11/configuring-nginx-to-serve-multiple-webapps-from- अलग- निर्देशिका /? चीयर्स – gru

+0

@gru आपको बहुत बहुत धन्यवाद। हाँ, मैंने कोशिश की थी। मुझे लगता है कि नीचे मेलविन का जवाब अच्छा दिखता है, है ना? ऐसा लगता है यह मेरे लिए काम का होगा! – Ryan

उत्तर

16

आप मार्ग सब कुछ है, लेकिन आप /blog/index.php में index.php के लिए सब कुछ /blog/ लिखने की ज़रूरत:

location /blog/ { 
    try_files $uri $uri/ @wordpress; 
} 

location @wordpress { 
    rewrite /blog/ /blog/index.php; 
} 

फिर अपने php हैंडलर की जरूरत है पथ की जानकारी का समर्थन:

location ^/blog/index.php(/.*)?$ { 
    fastcgi_split_path_info ^(/blog/index.php)(/.*)$; 
    fastcgi_pass 127.0.0.1:9123; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_path_info; 
    include fastcgi_param; 
} 

त्रुटि लॉग के लिए डीबग वर्बोजिटी चालू करें यदि यह काम नहीं करता है और लॉग जानकारी पोस्ट करता है।

अद्यतन: मूल प्रश्न प्रश्नकर्ता से ध्यान दें:

यह मेरा नया Nginx config है, जो इन URL के लिए काम करने के लिए लगता है का एक टुकड़ा है: /,/ब्लॉग,/बेशक,/ब्लॉग/स्वाभाविक तौर पर खुश , और /blog/sitemap_index.xml

... 
error_log /Users/myuser/code/myproject/storage/logs/nginx_error.log debug; 

# Point index to the Laravel front controller. 
index   index.php; 

location /blog/ { 
    try_files $uri $uri/ @wordpress; 
} 

location @wordpress { 
    rewrite /blog/ /blog/index.php; 
} 

location ^/blog/index.php(/.*)?$ { 
    fastcgi_split_path_info ^(/blog/index.php)(/.*)$; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_path_info; 
    include fastcgi_params; 
} 

location/{ 
    try_files $uri $uri/ /index.php$is_args$args; 
} 
... 
+1

यह उदाहरण मेरे लिए एक प्रमुख अपवाद के साथ काम किया। पुनः लिखना मेरे सभी सीएसएस और जेएस संदर्भों को तोड़ देता है। – brs14ku

+0

मैंने ठीक उसी कदम का पालन किया लेकिन किसी कारण से, जब मैं ब्लॉग फ़ोल्डर में जाता हूं, तो मुझे "बहुत अधिक रीडायरेक्ट्स" त्रुटि मिलती है। –

संबंधित मुद्दे