php - 如何重写根目录中的目录

标签 php apache .htaccess

我想更改我的网址。这里我有一个这样的目录结构

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

那我要根据根目录下的url如下

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';
}

当我前往 localhost/example/login 时,但目的地是 404.php(错误)。

你能帮帮我吗?

最佳答案

$_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]

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

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

关于php - 如何重写根目录中的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20648963/

相关文章:

apache - 我在测试hadoop多节点集群时遇到了一些问题

php - 如何防止IDM抓取MP3文件?

zend-framework - 迁移Magento后的问题

apache - .HTACCESS 文件导致内部服务器错误

php - 即使对于已登录的用户,也可以在页面加载时清除 Woocommerce 购物车

php - Twig - 在数据描述中的 href 中替换双引号

php - 使用此 php 代码在新选项卡中打开 pdf

apache - 访问日志 apache 和 htaccess

php - 在动态填充 div 后让 js 触发

apache - 如何在同一IP的不同域名上应用不同的SSL证书?