2013-12-18 10 views
6

मैं अपना यूआरएल बदलना चाहता हूं। यहाँ मैं इसरूट निर्देशिका में निर्देशिका के लिए पुनर्लेखन

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

की तरह एक निर्देशिका संरचना है तो मैं नीचे जड़ में मौजूदा निर्देशिका के अनुसार

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

मैं कोशिश की है के साथ एक .htaccess फ़ाइल बनाने की तरह यूआरएल चाहते हैं निम्नलिखित सामग्री

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

और यह 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'; 
} 

जब मैं लोकलहोस्ट/उदाहरण/लॉगिन का नेतृत्व करता था, लेकिन गंतव्य 404.php (ERROR) है।

क्या आप मेरी मदद कर सकते हैं?

+0

तो आपके पास कुछ 'rewritecond' है ...' rewriterule' कहां है? –

+0

@AndyJones क्या आप फिर से मेरे प्रश्न की जांच कर सकते हैं? – ramadani

+1

आपने http: // localhost/example/login की कोशिश की? या कुछ और? क्या आप अपने 404.php पृष्ठ में कहीं भी $ _SERVER ["REQUEST_URI"] डंप करते हैं? –

उत्तर

1

$_SERVER['REQUEST_URI'] चर संपूर्ण यूआरआई है। तो यदि http://example.com/example/login पर जा रहे हैं $_SERVER['REQUEST_URI'] चर /example/login है। इसके बजाय अपने कोड उपयोग $_SERVER['PATH_INFO'] में

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

(ध्यान दें कि ^/public/ से मेल खाते हैं कभी नहीं होगा, क्योंकि REQUEST_URI/example/public होगा)

तब: कुछ है कि तुम क्या कर की कोशिश कर सकते करने के लिए अपने htaccess फ़ाइल बदल रहा है।

1

ऐसा लगता है कि प्राथमिकता पर सेट के साथ PHP एक्सटेंशन छिपाने की कोशिश कर रहे हैं:

  1. सार्वजनिक निर्देशिका
  2. कहीं

अपने 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] 
संबंधित मुद्दे