2012-10-12 27 views
5

üzerinden binlerce url yaratarak bir çok kullanıcının bir mysql_database içinde saklandığı bir web sitesi programlıyorum. Burada her kullanıcının bir kimlik ve profilename (jim.button.1 gibi) diğer alanlar arasında. www.mysite.com/jim.button.1mod-rewrite

Şimdi ben bir mod_rewrite_rule o yapabileceğini biliyorum: Bu yapıya sahiptir (kullanıcı kimliği üzerinde örneğin bir mysql_select yoluyla profil var olsun) bir url istiyorum Ama binlerce kullanıcı ile çok büyük bir .htaccess dosyası alacağım. Bu arada mod yeniden yazma konusunda uzman değilim, ama nasıl çalıştığını anlıyorum.

Bunu yapmak için bir yol var mı, bir veya iki mod_rewrite_rule içinde mi yoksa bunu başarmanın başka bir akıllı yolu var mı?

Tüm yardımlar açıktır. Böyle kullanıcıyı alabilirsiniz

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

sizin users.php olarak:

cevap

1

Böyle bir şey kullanabileceğiniz bu almak için

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

ince ayar yapmak için var onunla entegre Sitenizin geri kalanı, ama sizde fikir edinirsiniz.

+0

Neden aşağı oy? Yine seri seçmen mi? – JvdBerg

+0

Cevabınız bana iyi görünüyor. Ayrıldım. –

+0

Yeniden yazma kuralınız her * istek ile eşleşecektir, bu nedenle gerçek dosyalar ('.css',' .js', '.jpg' vb.) Sunulmayacaktır. Muhtemelen OP'nin istediği şey değil. –

2

kullanarak, varolan dosyanın eşleşmeyebileceğinden tüm URL'leri yeniden olabilir:

<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> 

Sonra $_SERVER['REQUEST_URI'] aracılığıyla gerçek URL'sini kapmak. İşte bir örnek:

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

bir örnek için https://github.com/zendframework/ZendSkeletonApplication/blob/master/public/.htaccess bakınız.

1

Ben birleştirmek istiyorum hem Ross Smith'in ve JvdBerg Diyelim ki böyle bir şey ile bitirmek istiyorum böylece: yerine URL'nin tamamını ayrıştırmak zorunda kalmak yerine komut dosyanızda işlemek için daha kolay kılacak

<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'u açtıktan sonra başlangıç ​​4 satırına ihtiyaç duyulur, böylece sitenin geri kalanı çalışmaya devam edebilir (dizin, dosya, bağlantılar kontrol edilir) ve eğer URL bir ilk kuralı kullanırsa ve daha fazla işlem yapmazsa. Ve sonra ikinci kural, öncekilerden biri değilse ve 'profile.php' sayfanıza ulaşmak için yönlendirmelerdir.

Ardından 'profile.php' sayfasında, gibi değerler elde edebilirsiniz:

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

Ve oradan gidin.

+0

Ayrıca, daha fazla kural eklemeyi planlıyorsanız, "RewriteRule" un artık mümkün olduğu kadar spesifik olması gerektiğini de eklemek istiyorum. Böylece RewriteRule^(. *) $ Profile.php? Kullanıcı = $ 1 [NC, L] '' RewriteRule ([a-zA-Z] +) \. ([A-zA-Z] +) \ 'yi değiştirmek. ([0-9] +) $ profile.php? Fname = $ 1 & lname = $ 2 & uid = $ 3 [NC, L] 've' $ _REQUEST ['fname'] ',' $ _REQUEST ['lname'] ile erişerek 've' $ _REQUEST ['uid'] 'komut dosyanızda. Ayrıca, biçimin beklediğiniz gibi olmasını sağlar ve URI'yi PHP'niz için beklediğiniz karakter kümelerine sahip olmasını kısıtlar. – Jon

+0

Sonunda bunu uygulamak için zamanım var ve cevabınız çok kullanışlıdır! Teşekkür ederim. – Rob

+0

Neden düşüş var? Bir şeyi düşürecekseniz, en azından neden olduğuyla ilgili bir yorum bırakın. – Jon