如何重写根目录中的目录

ram*_*ani 6 php apache .htaccess

我想改变我的网址.这里我有一个像这样的目录结构

htdocs/
      example/
              public/
                     login.php
                     people/
                            people1.php
                            people2.php
                     animal/
                            animal1.php
                            animal2.php
                     404.php
              assets/
                    css/
                    js/
Run Code Online (Sandbox Code Playgroud)

那么我想按照根目录中的现有目录下面的url

localhost/example/login
localhost/example/people/people1
localhost/example/people/people2
localhost/example/animal/animal1
localhost/example/animal/animal2
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用以下内容制作.htaccess文件

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

它是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';
}
Run Code Online (Sandbox Code Playgroud)

当我去localhost/example/login时,目的地是404.php(错误).

你能帮助我吗?

Jon*_*Lin 1

$_SERVER['REQUEST_URI']变量是整个URI。所以如果我们要访问的http://example.com/example/login变量$_SERVER['REQUEST_URI']/example/login. 您可以尝试将 htaccess 文件更改为:

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

(请注意,^/public/永远不会匹配,因为REQUEST_URI将是/example/public

然后在您的代码中使用$_SERVER['PATH_INFO']