2013-12-18 14 views
6

Chcę zmienić adres URL. Tutaj mam strukturę katalogów jak tenPrzepisywanie do katalogu w katalogu głównym

htdocs/ 
     example/ 
       public/ 
        login.php 
        people/ 
          people1.php 
          people2.php 
        animal/ 
          animal1.php 
          animal2.php 
        404.php 
       assets/ 
        css/ 
        js/ 

potem chcę url jak poniżej zgodnie z istniejącego katalogu w katalogu głównym

localhost/example/login 
localhost/example/people/people1 
localhost/example/people/people2 
localhost/example/animal/animal1 
localhost/example/animal/animal2 

Próbowałem dokonywania plik .htaccess z następującej treści

Options +FollowSymLinks 
RewriteEngine On 
rewritecond %{REQUEST_URI} !^/public/(.*) 
rewritecond %{REQUEST_URI} !^/assets/(.*) 
RewriteRule .* index.php [L] 

i to index.php

$requested = empty($_SERVER['REQUEST_URI']) ? false : $_SERVER['REQUEST_URI']; 

switch ($requested) { 

    case '/login': 
     include 'public/login.php'; 
     break; 
    default: 
     include 'public/404.php'; 
} 

kiedy udałem się do localhost/example/login, ale celem jest 404.php (BŁĄD).

możesz mi pomóc?

+0

Więc masz trochę "przepisania" ... gdzie jest "przepisywanie"? –

+0

@AndyJones czy możesz ponownie sprawdzić moje pytanie? – ramadani

+1

Próbowałeś http: // localhost/example/login? Albo coś innego? Czy zrzucasz '$ _SERVER [" REQUEST_URI "]' gdzieś na swojej stronie 404.php? –

Odpowiedz

1

Zmienna jest identyfikatorem URI całego. Jeśli więc zmienisz wartość na http://example.com/example/login, zmienna $_SERVER['REQUEST_URI'] to /example/login. Coś, co można spróbować zrobić zmienia plik .htaccess do:

Options +FollowSymLinks 
RewriteEngine On 
rewritecond %{REQUEST_URI} !/public/(.*) 
rewritecond %{REQUEST_URI} !/assets/(.*) 
RewriteRule ^(.*)$ index.php/$1 [L] 

(zauważ, że ^/public/ nigdy nie będzie pasował, bo REQUEST_URI byłoby /example/public)

Następnie w użyciu kodu $_SERVER['PATH_INFO'] zamiast.

1

Wygląda na to, że starają się ukryć rozszerzenie PHP z priorytetem ustawionym na:

  1. katalogu publicznym
  2. gdzie indziej

umieścić ten kod w pliku DOCUMENT_ROOT/.htaccess:

RewriteEngine On 

# skip for existing files/directories (/assets will be skipped here) 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

# try to load PHP file from public directory 
RewriteCond %{DOCUMENT_ROOT}/public/$1.php -f 
RewriteRule ^(.+?)/?$ /public/$1.php [L] 

# now try .php elsewhere 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 
Powiązane problemy