Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mod_rewrite] Ładowanie panelu admina
Forum PHP.pl > Forum > PHP
WebCM
Chcę, aby mod_rewrite przepisywał linki do pliku admin/index.php, jeżeli użytkownik wpisze: domena.com/admin Niestety nie udaje mi się uzyskać zadowalającego efektu. Plik .htaccess:
Kod
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_/]+)$ index.php?a=$1 [L,QSA]
Co należy dopisać, aby serwer rozpoznawał, że trzeba przekierować do panelu admina? Po wpisaniu domena.com/admintest powinna wyświetlić się już właściwa strona (nie panel admina).

Może lepiej wszystkie żądania przekierować do 1 pliku index.php i dopiero tam rozpoznać, czy trzeba przejść do PA, czy do witryny? URL dzielę na fragmenty w ten sposób:
Kod
$URL = isset($_GET['a']) ? explode('/',$_GET['a']) : array('main');
Rozważmy adres: domain.com/admin/categories
W przypadku przekierowania mod_rewrite ID modułu ("categories") znajduje się w $URL[0]. Natomiast gdy wszystkie żądania odbiera index.php, nazwa modułu PA jest przechowywana w $URL[1]. Nie będę mógł potem zmienić sposobu przekierowania bez edycji wszystkich plików lub stosowania trików.
Matte
Kod
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/([A-Za-z0-9_/]+)$ admin/index.php?a=$1 [L,NC]
RewriteRule ^admin$ admin/index.php [L,NC]

Jeżeli dobrze zrozumiałem ; )
WebCM
Nie działa poprawnie. Po wpisaniu "admin" w pasku adresu widać katalog "admin", zaś jest wyświetlana strona główna. Wcześniej jeszcze przepisuję adresy z "localhost" do "localhost/folder", ale to raczej nie ma znaczenia. Chyba, że mam stworzyć kolejny plik .htaccess w folderze "admin" i dodać dodatkowe reguły - ale i tak Apache ich nie uwzględni.

Który sposób zapewni większą stabilność i wydajność?

1. Przepisywanie linków z /admin/ za pomocą .htaccess

2. Użycie 1 pliku index.php, który:
a) dołączy panel admina, gdy $URL[0] === 'admin'
b) wyświetli właściwą podstronę na podstawie $URL[0], gdy $URL[0] != 'admin'
szagi3891
A może tak :
Kod
<?php
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/admin/
RewriteRule (.*) index.php?a=$1 [L,QSA]
?>


Wszystkie żądania zostaną skierowane do pliku głównego oprócz katalogu "admin". Czy o to Ci chodziło ?
WebCM
Postanowiłem, że wszystkie żądania będzie odbierał plik index.php. Teraz stoję przed kolejnym problemem.

Na początku przypomnę, że w głównym katalogu (localhost) znajduje się .htaccess w regułką:
Kod
RewriteEngine On
RewriteRule (.+) /strona/$1 [L,QSA]
Po prostu nie chcę edytować pliku host w systemie. Ona raczej nie ma znaczenia, choć może mylę się?

Katalog strona zawiera kolejny .htaccess:
Kod
php_value session.use_only_cookies 1
php_value session.use_trans_sid 0
php_value register_globals 0
php_value magic_quotes_gpc 0

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d - regułka zbędna
RewriteRule (.*) index.php?a=$1 [L,QSA]
W katalogu strona znajduje się folder admin. Niestety, jeżeli w URL-u odwołam się do folderu admin, Apache przekierowuje przeglądarkę do: localhost/strona/admin/?a=admin

Nie rozumiem, dlaczego. Co robię źle?
Matte
Co do drugiego problemu problemu, wywal flagę QSA. Powinno załatwić sprawę.
WebCM
Wywaliłem z obu plików .htaccess i nic to nie dało.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.