Merhaba.
Bir süredir aklıma takılan bir şey var.
Bazı web sitelerinde sanki sitenin uzantısı klasörmüş gibi görünüyor. Mesela ekşi sözlük sitesinden bahsedeyim. Bir kullanıcının profiline girmek istenildiğinde https://eksisozluk.com/biri/KULLANICI ADI şeklinde erişiliyor. Yani /biri/users.php?kullaniciadi=KULLANICI ADI gibi bir şey yok. Sitenin her kullanıcı adı için de bir klasör oluşturduğunu düşünmüyorum. Sanırım .htaccess gibi bir şey var.
Kısacası bunu nasıl yapabilirim?
Sorumu tam olarak nasıl ifade edebilirim bilmiyorum ama anlatmak istediğim şeyi umarım anlatabilmişimdir.
PHP Uzantısını Klasör Olarak Nasıl Gösterebilirim?
5
●198
- 01-09-2022, 18:16:40
- 01-09-2022, 18:17:52Teşekkürler hocam. Bunu zaten biliyordum ama sanırım bunda da /biri/index?kullaniciadi=... gibi bir şey yapmak gerekiyor. Ya da ek bir ayar ile benim dediğim şekle getirilebiliyor mu bilmiyorumSefaakcihan adlı üyeden alıntı: mesajı görüntüle
- 01-09-2022, 18:23:58Örnek;
.htaccess dosyası oluşturun
RewriteEngine on RewriteRule ^biri\/([\w]+)$ users.php?kullaniciadi=$1 [QSA]
w / d ^ $ gibi ifadeler regex olarak tanımlanıyor.
^ => başlangıç
$ => bitiş anlamı vardır
w => a-z,A-Z 0-9 ve _ karakterlerini içerebilir
+ => en az bir karakter
* => hiç veya daha falza
vb...
users.php dosyası
$kullaniciadi = $_GET['kullaniciadi']; //todo
- 01-09-2022, 18:31:10biri.php = controller .php tagı siliniyor. link 'biri/XXX' olduğunda; biri = route(0), XXX = route(1) oluyor. controller içinde
if(isset(route(1))) { .... }yapıyorsun. fonksiyon içinde üye profil view dosyasına yönlendirip, route(1) = XXX kullanıcı adını sql'de taratıyorsun. çıkan sonuçları view'e yazdırıyorsun.
yani route yapısına sahip olman gerekiyor, biri/XXX teki XXX'i seçebilmek için.
$routeExplode = explode('?', $_SERVER['REQUEST_URI']); $route = array_values(array_filter(explode('/', $routeExplode[0]))); if (SUBFOLDER_NAME != '/'){ array_shift($route); } function route($index) { global $route; return isset($route[$index]) ? $route[$index] : false; }bu kodu proje içine ekleyerek route(0) , route(1) değerlerini alabilirsin. - 01-09-2022, 18:31:53@darness; teşekkürler hocam.
Çözümü şöyle buldum. biri diye bir klasör oluşturdum. Buna istek olarak gelen klasör istekleri eğer klasörde mevcut değilse kullanici.php?kullanici=klasör adı olacak şekilde .htaccess dosyası oluşturdum.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ kullanici.php?kullanici=$1 [QSA,L]kullanici.php dosyasında ise şu var:
<?php if (isset($_GET["kullanici"])) { echo $_GET["kullanici"]; } else { echo "Gönderim Yok"; }biri klasörü içinde başka hiçbir klasör olmaması gerekiyor. php dosyası içinde daha sonrasında veri tabanı sorgusu ile böyle bir kullanıcının aslında var olup olmadığını da kontrol edip ona göre başka bir 404 sayfasına yönlendirme yapılabilir.
Tekrardan teşekkürler.