Php 从url隐藏子文件夹

Php 从url隐藏子文件夹,php,apache,.htaccess,url,directory,Php,Apache,.htaccess,Url,Directory,首先,我想告诉大家,这是我第一次发表关于堆栈溢出的文章,所以如果我做错了什么,我也想让我知道 我正在尝试构建一个PHP脚本,其中包括控制器和模板等文件夹。两者都是重定向,并在其中的一个或另一个上包含必需的php文件。所有内容都可以通过根域目录上的索引访问。因此,我的问题是如何隐藏url,即domain.com/“controller”/activate.php或domain.com/“templates”/login.php 我让您知道,我通过索引中一些参数(if)中的include调用了“te

首先,我想告诉大家,这是我第一次发表关于堆栈溢出的文章,所以如果我做错了什么,我也想让我知道

我正在尝试构建一个PHP脚本,其中包括控制器和模板等文件夹。两者都是重定向,并在其中的一个或另一个上包含必需的php文件。所有内容都可以通过根域目录上的索引访问。因此,我的问题是如何隐藏url,即
domain.com/“controller”/activate.php
domain.com/“templates”/login.php

我让您知道,我通过索引中一些参数(
if
)中的include调用了“templates”文件夹中的
login.php

现在我将发布我的
.htaccess
,以便您可以查看那里的流程,而我过去已经尝试隐藏“模板”文件夹。但是,通过在.htaccess上编码,子目录不再可访问。这就是为什么我必须删除张贴在这里的代码,因为这些代码并不能解决我的问题

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteBase /

    ErrorDocument 404 /templates/404

    # To externally redirect /dir/abc.php to /dir/abc
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC]
    RewriteRule ^ /%1 [R=301,L,NE]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)/?$ $1.php [QSA,NC,L]


</IfModule>

重新启动发动机
重写基/
错误文档404/模板/404
#将/dir/abc.php外部重定向到/dir/abc
重写cond%{THE_REQUEST}^[A-Z]{3,}\s/+(.+?)\.php[\s?][NC]
重写规则^/%1[R=301,L,NE]
重写cond%{REQUEST_FILENAME}-D
RewriteCond%{REQUEST_FILENAME}.php-f
重写规则^(+?)/?$$1.php[QSA,NC,L]
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript


到目前为止,my.htaccess的参数隐藏了url和缓存Gzip压缩方法上的.php扩展。所有的帮助都会感激它,无论是错误的还是正确的

如果我没记错的话,你得到了basepath/ControllerName/Method之类的东西,你想隐藏ControllerName部分吗? 在我看来,使用MVC来处理url/friendlyurl,只需保持一个相对基本的htaccess,比如

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /smw/


# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?$1 [QSA,L]

希望对你有帮助!如果你需要更多信息,请告诉我。我不是这个意思。为了给你更多的帮助,我将给你文件夹的详细信息以及它是如何工作的。所以:根域目录httpd hosting:
**assets**(包含js、css、img的文件夹)**controller**(包含php文件的文件夹,其中包含类、函数和db连接)**languages**(包含php文件的文件夹,用于检查区域并决定读取哪个php文件词汇表数组)**templates**(包含登录、激活等php文件的文件夹)**.htaccess**(包含您在上面看到的特定代码的文件)**index**(包含登录php文件的php文件,位于templates文件夹内)
假设我们有一个名为login.php和profil.php的索引(如果该语句为真)。因此,url将首先显示domain.com,然后如果该语句为真,将重定向到profil,url将在domain.com/templates/profil.php处更改。因此,关于如何“正确”调用和显示页面,我有两种方法:1)以某种方式使用.htaccess小心并隐藏子文件夹。2) 通过使用带有函数和类的php文件,在控制器文件夹上显示索引上的所有内容,如果语句正确且url为domain.com/something.phpany idea或solution,则可能包括页面@非常感谢你。很高兴能帮忙!实际上,在我看来,我真的建议使用.htaccess而不是include来处理这个问题。这是处理显示的逻辑方法,正如您所说的,更好的加载(包括索引上的所有内容可能会变得有点棘手,这取决于您的数据)。我想知道你是否能关注一下Mvc处理技术,因为我总是关注我的url,而且因为我使用自己的路由参数,我很久没有遇到过这种问题/困境@祝你好运!
        public function __construct(){
    $uri = $_SERVER["REQUEST_URI"];
    $uri = preg_replace("#".BASE_PATH_PATTERN."#i", "", $uri, 1);
    $this->uriExploded = explode("/",  trim($uri, "/")   );
     /*Check if there is another folder */
    $check = preg_match("/something/i", $uri);
    if($check != false)
    {
        /*instruction... */
    }