2012-04-04 11 views
12

पर उदासीन हों, क्या मैं एक ही पंक्ति में निम्नलिखित दो मार्गों को कैप्चर कर सकता हूं?Play 2.0 में यूआरएल रूट करने के लिए कैसे करें ताकि वे एक समाप्ति स्लैश

GET  /game     controllers.Main.app.gamelist 
GET  /game/     controllers.Main.app.gamelist 
+2

वहाँ खेलने 2.x पर एक समाधान यहां पोस्ट है। कॉम/ए/13196239/422288 –

उत्तर

6

इस समय समर्थित नहीं है और एक ticket has been submitted to the issue trackerGoogle Groups पर इस बारे में एक चर्चा भी शामिल है (कुछ वर्कअराउंड सहित)।

उम्मीद है कि यह जल्द ही कुछ स्मार्ट तरीके से लागू किया जाएगा।

+0

मैंने आपको सही चिह्नित किया है, हालांकि यदि यह हल हो जाता है तो हमें शायद बाद में आपकी उत्तर अपडेट करनी चाहिए। –

5

आप playframework 1.x उपयोग कर रहे हैं तो यह है:

GET /game/? controllers.Main.app.gamelist 
+0

धन्यवाद, मैं संस्करण 2 का उपयोग कर रहा हूं, जो लोग शीर्षक में 2.0 जोड़ना भूल गए हैं। –

+1

मुझे जोड़ना चाहिए, यह विधि Play 2 में काम नहीं कर रही है।0 –

3

(याकूब लिए देर हो चुकी है, लेकिन किसी को यह उपयोगी लग सकते)

मैं भी इस समस्या थी, यहाँ मेरी workaround है:

मैं अपने मार्गों निम्नलिखित पंक्ति के अंत में डाल (इस इस तरह, यह यूआरएल है कि कुछ और)

GET /*path controllers.Application.appendSlash(path: String) 

से मेल नहीं खाती से मेल खाता है और यहाँ मेरी Application.appendSlash है:

public static Result appendSlash(String path) { 
char ending = path.charAt(path.length() -1); 
if (ending != '/') 
    return redirect('/' + path + '/'); 
else 
    return notFound(); 
} 

आप notFound()

आशा इस

में मदद करता है डेविड

संपादित करने के लिए एक paramer के रूप में अपने 404 नहीं मिला दृश्य जोड़ने के लिए चाहते हो सकता है: बस एक बात: इस आम ब्राउज़र नेविगेशन के लिए काम करेंगे (अगर कोई यूआरएल टाइप करता है लेकिन पिछला '/' भूल जाता है), लेकिन यह AJAX या अन्य तरीकों से स्वचालित अनुरोधों के साथ काम नहीं करेगा: इसके लिए आपको पूरा यूआरएल टाइप करना होगा।

तो स्लैश के साथ एक मार्ग नहीं मिला है यह स्लैश हटाया के साथ एक कोशिश करता है:

+0

वैसे भी उपरोक्त, मैं जवाब की सराहना करता हूं। –

2

एक और संभावना है अपने वैश्विक-वस्तु में डाल रहा है।

मार्गों फाइल सिर्फ अनुगामी स्लैश के बिना मार्ग है ...

@Override 
public Result onHandlerNotFound(Http.RequestHeader requestHeader) { 
    if (hasTrailingSlash(requestHeader.path())) { 
     return Action.redirect(removeLastChar(requestHeader.path())); 
    } 
    return super.onHandlerNotFound(requestHeader); 
} 

private static String removeLastChar(String value) { 
    return value.substring(0, value.length() - 1); 
} 

private static boolean hasTrailingSlash(String value) { 
    return value != null && value.endsWith("/"); 
} 
5

इस जबकि, इस समय का समर्थन किया जाना प्रतीत नहीं होता है यह Global.scala में

onRouteRequest अधिभावी द्वारा प्राप्त किया जा सकता

हम इसे इस तरह कर रहे हैं:

import play.api._ 
import play.api.mvc.{Handler, RequestHeader, Action, Controller} 


object TrailingSlashRedirector extends Controller { 
    def redirect(request: RequestHeader) = Action { 
    Redirect(request.path.dropRight(1), request.queryString, 301) 
    } 
} 

object Global extends GlobalSettings { 

    override def onRouteRequest(request: RequestHeader): Option[Handler] = { 

    val EndsWithASlash= """/(.*)/$""".r 

    request.path match { 
     case EndsWithASlash(_) => Some(TrailingSlashRedirector.redirect(request)) 
     case _ => super.onRouteRequest(request) 
    } 

    } 

} 
1

यहाँ समाधान मैं

01 पाया गया है

ans तो मैं Global.scala

override def onRouteRequest(request: RequestHeader): Option[Handler] = { 
    super.onRouteRequest(NormalizedRequest(request)) 
} 

में इस तरह इसका इस्तेमाल और यहाँ एक ऐसी ही सवाल है: http: // stackoverflow play framework2: remove trailing slash from urls

+0

क्या इसे बिना रीडायरेक्ट के हल करना संभव है? – Sergey

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