2012-10-12 17 views
5

के माध्यम से यूआरएल के हजारों बनाने मैं एक वेबसाइट जो एक mysql_database जिसमें प्रत्येक उपयोगकर्ता अन्य क्षेत्रों के बीच एक आईडी और प्रोफ़ाइल (जैसे jim.button.1) है में संग्रहीत उपयोगकर्ताओं का एक बहुत है प्रोग्रामिंग कर रहा हूँ। www.mysite.com/jim.button.1आधुनिक-पुनर्लेखन

अब मुझे पता है मैं एक mod_rewrite_rule के साथ कर सकता है कि: मैं एक यूआरएल (जो जैसे userID पर एक mysql_select के माध्यम से प्रोफ़ाइल है मिलता है) इस संरचना है कि चाहते हैं , लेकिन हजारों उपयोगकर्ताओं के साथ मुझे एक बहुत बड़ी। htaccess फ़ाइल मिल जाएगी। मैं रास्ते में फिर से लिखने में एक विशेषज्ञ द्वारा नहीं हूं, लेकिन मैं समझता हूं कि यह कैसे काम करता है।

क्या ऐसा करने का कोई तरीका है, एक या दो mod_rewrite_rules में कहें या इसे पूरा करने का कोई और स्मार्ट तरीका है?

सभी सहायता का स्वागत है। आप इस तरह से प्राप्त कर सकते हैं उपयोगकर्ता

RewriteEngine On 
RewriteRule ^(.+)$ users.php?user=$1 [QSA,L] 

अपने users.php में:

उत्तर

1

आप कुछ इस तरह का उपयोग कर सकते

$user = $_GET['user']; 
// do your stuff with the user 

आप ठीक धुन करने के लिए है इसे पाने के लिए यह के साथ एकीकृत आपकी बाकी साइट, लेकिन आपको विचार मिलता है।

+0

नीचे वोट क्यों? क्या यह मेरा सीरियल फिर से मतदाता है? – JvdBerg

+0

आपका उत्तर मेरे लिए ठीक लगता है। मैं ऊपर उठाया। –

+0

आपका पुनर्लेखन नियम * हर * अनुरोध से मेल खाता है, इसलिए वास्तविक फ़ाइलें ('.css',' .js', '.jpg', आदि) परोसा नहीं जाएगा। शायद ओपी क्या चाहता है नहीं। –

2

आप सभी URL किसी मौजूदा फ़ाइल को मैप नहीं है, का उपयोग कर फिर से लिखने सकता है:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule ^.*$ index.php [NC,L] 
</IfModule> 

फिर $_SERVER['REQUEST_URI'] के माध्यम से वास्तविक URL हड़पने। यहां एक उदाहरण दिया गया है:

$parts = parse_url($_SERVER['REQUEST_URI']); 
$user = $parts['path']; 

उदाहरण के लिए https://github.com/zendframework/ZendSkeletonApplication/blob/master/public/.htaccess देखें।

1

मैं गठबंधन दोनों रॉस स्मिथ की और JvdBerg की ताकि आप की तरह कुछ को रखना होगा:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule ^(.*)$ profile.php?user=$1 [NC,L] 
</IfModule> 

जो बल्कि पूरे यूआरएल को पार्स करने की तुलना में यह आसान अपनी स्क्रिप्ट में कार्रवाई करने के लिए होगा। RewriteEngine को चालू करने के बाद शुरुआती 4 लाइनों की आवश्यकता है, इसलिए शेष साइट संचालित हो सकती है (निर्देशिका, फ़ाइल, लिंक जांचता है) और यदि यूआरएल पहला नियम का उपयोग करेगा और प्रक्रिया नहीं करेगा। और फिर दूसरा नियम यह है कि यह पिछले में से एक नहीं है और आपके 'profile.php' पृष्ठ पर पहुंचने के रूप में रीडायरेक्ट करता है।

फिर अपने 'profile.php' पृष्ठ में, आप अपने मूल्यों के रूप में प्राप्त कर सकते हैं:

list($fname, $lname, $id) = explode('.', $_REQUEST['user']); 

और वहां से चले जाते हैं।

+0

मैं यह भी जोड़ना चाहता हूं कि यदि आप बाद में अधिक नियम जोड़ने की योजना बना रहे हैं, तो आपको अब अपने 'रिवाइटरूले' के साथ यथासंभव विशिष्ट होना चाहिए। तो 'रिवाइट्रूल^(। *) $ Profile.php बदल रहा है? उपयोगकर्ता = $ 1 [एनसी, एल] 'से' रिवाइट्रूल ([ए-जेए-जेड] +) \। ([ए-जेए-जेड] +) \। ([0-9] +) $ profile.php? Fname = $ 1 और lname = $ 2 और uid = $ 3 [NC, L] 'और उन्हें' $ _REQUEST ['fname'] ',' $ _REQUEST ['lname'] के माध्यम से एक्सेस करना ', और आपकी स्क्रिप्ट में '$ _REQUEST [' uid ']' '। यह यह भी सुनिश्चित करेगा कि प्रारूप आप अपेक्षा करते हैं, और यूआरआई को उस चरित्र सेट को प्रतिबंधित करने के लिए प्रतिबंधित करें जिसे आप अपने PHP के लिए उम्मीद कर रहे हैं। – Jon

+0

आखिर में मेरे पास इसे लागू करने का समय है और आपका जवाब बहुत उपयोगी है! धन्यवाद। – Rob

+0

डाउनवोट क्यों? यदि आप कुछ कम करने जा रहे हैं, तो कम से कम एक टिप्पणी क्यों छोड़ दें। – Jon