2016-04-11 25 views
1

Bir proje için kendi sosyal medyamı oluşturmaya çalışıyorum. Kullanıcı veritabanını "id" veya özel "/my.user" url için sorgulayan bir php betiğidir. Ben o gibi olmak istiyorum url, bunu girdiğinizde : mysite.com/my.user bu kodla çalışır:SEO dostu URL'leri htaccess ile nasıl edinebilirim?

RewriteRule ^/?(.+)/?$ ./profile.php?u=$1 [QSA,L] 

Ama htaccess beni koymak için izin vermez " profilin kimliği, mysite.com/20 örneğin çalışmıyor. Başka htaccess kodu denedi, ama bu yukarıdaki gibi aynı şekilde çalışır:

Yani
RewriteRule ^/?([a-zA-Z0-9\-=&[email protected]\.]+)/?$ profile.php?u=$1 [QSA,L] 

şeyleri temizlemek için;

  • Bu çalışır: mysite.com/my.user
  • Bu does not: mysite.com/20 veya mysite.com/myuser

Ben bu çalışma almak için bekliyoruz:

  • mysite.com/20
  • mysite.com/my.user

Ne yapmalıyım?

Tam .htaccess kodu:

AddDefaultCharset UTF-8 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

Options +FollowSymLinks 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^./profile.php 


RewriteRule ^/?(.+)/?$ ./profile.php?u=$1 [QSA,L] 

<ifModule mod_gzip.c> 
mod_gzip_on Yes 
mod_gzip_dechunk Yes 
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$ 
mod_gzip_item_include handler ^cgi-script$ 
mod_gzip_item_include mime ^text/.* 
mod_gzip_item_include mime ^application/x-javascript.* 
mod_gzip_item_exclude mime ^image/.* 
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* 
</ifModule> 

ne şimdi olur mysite.com/my.user (özel kullanıcı url) 'dir çalışan, ancak bir kullanıcı mysite.com gibi hiçbir nokta vardır değilse/MyUser. Sonra var olmayan myuser.php'yi almaya çalışır. Ayrıca "my.user" gibi "id" girdiğimde de: mysite.com/20 sadece "profil bulunamadı" diyor, bu yüzden orada bir şeyler oluyor.

$profile = mysqli_real_escape_string($mysqli, $_GET['u']); 
if (filter_var($profile, FILTER_VALIDATE_INT) == true) { 
    $query = "SELECT * FROM UserProfile, Location WHERE UserProfile.id = '$profile' AND Location.id = '$profile'"; 
} else { 
    $queryurl = "SELECT id FROM UserProfile WHERE UserProfile.ProfileUrl = '$profile'"; 
    if ($result2 = $mysqli->query($queryurl)) { 
     while ($row2 = $result2->fetch_assoc()) { 
      $userid = $row2['id']; 
     } 
    } 
    $query = "SELECT * FROM UserProfile, Location WHERE UserProfile.ProfileUrl = '$profile' AND Location.id = '$userid'"; 
    $result2->free(); 
} 

Saygılarımızla, Erik:

Bu

profile.php sorgu kodudur.

+0

"Çalışmıyor" tanımını yapın. Ne yapar, bunun yerine ne yapmasını bekliyorsunuz? – deceze

+0

Sanırım o, profile.php? U = 20 (burada 20 kimliktir), kendi özel URL'sini (my.user) kendi örneğinde güncellenen –

+0

@deceze olarak kullanacağı anlamına gelir ve evet, Dennis dedi. –

cevap

0

Neler oluyor, ilk kuralınız varolan herhangi bir uri ile eşleşmesi ve /uri.php ile tekrar yazmanız ve böylece 2'nizin tetiklenmemesidir.

Değişim

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^.]+)$ $1.php [NC,L] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([^.]+)$ $1.php [NC,L] 

için böylece kural mevcut php dosyalarını yalnızca eşleşebilir.

+1

yuvarlayabilirsiniz Teşekkür ederim, işe yarıyor! Htaccess ile o kadar iyi değilim, 15 saatimi aldım, seni seviyorum! :-) –