2015-03-13 7 views
5

SO पर कुछ similarquestions हैं, लेकिन कोई भी इस विशिष्ट परिदृश्य के लिए काम नहीं करता है।डैश के साथ सभी आगे की स्लैश को बदलें

मैं mod_rewrite का उपयोग करके, डैश के साथ एक यूआरएल पथ में सभी आगे की स्लैश को प्रतिस्थापित करना चाहता हूं।

तो https://stackoverflow.com/foo/bar/baz को https://stackoverflow.com/foo-bar-baz पर रीडायरेक्ट करना चाहिए।

पथ में (सेगमेंट के बीच) में सेगमेंट की संख्या हो सकती है।

मुझे लगता है कि समाधान में N flag शामिल है, लेकिन मैंने जो भी प्रयास किया है, वह अंतहीन पाश में परिणाम देता है।

+0

लिए कौन सा अपाचे के संस्करण पर रीडायरेक्ट करेगा? – hjpotter92

+0

http://stackoverflow.com/questions/28849327/removing-whitespaces-or-20-in-url-using-htaccess – CBroe

+0

@ hjpotter92 2.4 – ank

उत्तर

4

आप अपने जड़ .htaccess में इन 2 नियमों का उपयोग कर सकते हैं:

RewriteEngine On 
RewriteBase/

RewriteRule ^([^/]+)/([^/]+)/?$ $1-$2 [NE,L,R=302] 

RewriteRule ^([^/]+)/(.+)$ $1-$2 

यह example.com/foo/bar/baz/abc/xyz/123example.com/foo-bar-baz-abc-xyz-123

+0

यह पूरी तरह से काम करता है - क्या आप इसे समझाने में सक्षम हैं, यानी दो कदम क्यों? – ank

+1

हाँ यकीन है। पहला नियम तभी निष्पादित होगा जब केवल आगे की स्लैश को प्रतिस्थापित किया जाए, इसलिए अंतिम '/' तक छोड़ा जाएगा। दूसरा नियम प्रत्येक '/' को '-' से बदलकर कई बार निष्पादित करेगा, जब तक कि एक'/'छोड़ा न जाए। – anubhava

+0

दूसरा व्यक्ति 'N' ध्वज के बिना कई बार निष्पादित क्यों करता है? लूपिंग के लिए – ank

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