Mod Rewrite ve PHP

2 Cevap php

Ben bazı değişkenler ile sayfalara mod_rewrite kullanarak sayfaları yönlendirmek çalışıyorum (PHP'nin ile bunları kullanmak için $_GET).

Birkaç satır ile bir örnek vermek gerekirse:

  • Kullanıcı girdiğinde /c/stg o item_show.php?id=$1&f=1 (burada f sayfa numarası) yönlendirir.
  • Kullanıcı girdiğinde /c/stg/2 o show.php?id=$1&f=$2 ile ikinci sayfaya yönlendirir.

Ben burada istediğim, hiçbir hata veya bunların yanlış kullanımlar dosyamda var düşünüyorum ama:

Ben kullanıcı / string directly to go item_show.php?id=$1&f=1 $1 bizim string elbette ile girmek istiyorum ...

Ama gelen /c/ bölümünü çıkararak dosyamı değiştirdiğinizde RewriteRule diğer tüm dizinleri hataları vererek başlar ve herhangi bir dosya okumuyor (my.css) bile Ben zaten tanımlanmış olsa bir RewriteCond %{REQUEST_FILENAME} !-f ...

Do you have any suggestions? Or how can I made this system possible with any method?

Options FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#user
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC]

#marked
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC]

#content
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC]
RewriteRule ^c/([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC]

2 Cevap

RewriteCond sadece ilk RewriteRule aktarılan eğer ben yanlış mıyım?

Bunun yerine bu deneyin:

Options FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#user
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#marked
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#content
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC]

Alkış,

RewriteCond yönergeler sadece takip eden ilk RewriteRule direktifi aittir yok. Yani sizin durumunuzda iki RewriteCond direcitves sadece ilk RewriteRule direktifine değil başkalarına uygulanır.

Istek varolan bir dosyaya veya dizine eşlenebilir Ama eğer yeniden yazma işlemini çıkmak için bu kürtaj kural kullanabilirsiniz:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

Bu istek varolan bir dosyaya veya dizine doğrudan eşlenmiş olamaz eğer aşağıdaki kurallar sadece test olduğunu neden olur.