代码之家  ›  专栏  ›  技术社区  ›  achAmháin

htaccess-多扩展隐藏

  •  0
  • achAmháin  · 技术社区  · 6 年前

    我要删除 .html .php 我的扩展 .htaccess 文件。我希望用户能够查看 www.example.com/page.php网站 单击其中一个 www.example.com/page.php网站 www.example.com/page网站 ,但浏览器总是显示

    尝试了一些我在网上找到的选项,这个对我很有用:

    RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC] 
    RewriteRule ^ /%1 [NC,L,R] 
    RewriteCond %{REQUEST_FILENAME}.html -f 
    RewriteRule ^ %{REQUEST_URI}.html [NC,L] 
    RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] 
    RewriteRule ^ /%1 [NC,L,R] 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteRule ^ %{REQUEST_URI}.php [NC,L]
    

    我觉得很好,我可以在上面提到的页面之间浏览。

    但是,它随后无法登录到我的任何页面。当我输入凭据时,它只会重新打开我所在的页面,没有错误消息。

    .php文件 页面有一个 require("connection.php"); 在文件中获取对数据库的访问权限。

    然后是这样的:

    <?php
        require("connection.php"); 
        if(!empty($_POST)) 
        { 
            // check credentials
            // redirect to specific page
    ?>
    <!DOCTYPE html>
    <html>
    <body>
        <form action="index.php" method="post">
        // the rest of the form
    </body>
    </html>
    

    如果我注释掉php重写 .htaccess接口 登录按预期工作。这不是数据库问题,因为我可以查看从那里显示数据的页面,没有问题。

    .htaccess接口 不正确地重定向我的 .php文件

    2 回复  |  直到 6 年前
        1
  •  1
  •   Croises    6 年前

    您可以使用:

    #Without redirection with POST
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{THE_REQUEST} (/[^.]+)\.(html|php) [NC] 
    RewriteRule ^ %1 [L,R=301] 
    
    RewriteCond %{REQUEST_FILENAME}.html -f 
    RewriteRule ^ %{REQUEST_URI}.html [L] 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteRule ^ %{REQUEST_URI}.php [L]
    
        2
  •  0
  •   Tschallacka    6 年前

    你试过通过一个文件路由所有的请求吗?

    通常,您要做的是将php或html文件的所有流量重新路由到一个main index.php文件,并让它加载所请求的正确文件。

    这样你就有了一条管道来处理所有的特殊情况,准备文件等。。

    htaccess公司

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule . index.php [L]
    

    <?php
    require_once('connection.php');
    function render($file, $vars = []) 
    {
        if(file_exists($file) {
            ob_start();
            extract($vars);
            include($file);
            return ob_get_clean();
        }
        return false;
    }
    
    function route($file) 
    {
        $absolute = __DIR__ . $path;
        $extensions = ['.htm','.html','.php'];
        if(file_exists($absolute)) {
           return render($absolute);
        }
        else {
           foreach($extensions as $ext) {
               if(file_exists($absolute . $ext)) {
                  return render($absolute .$ext);
               }
           }
        }
        return false;
    }
    $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    if($output = route($path)) {
       echo $output;
    }
    else {
       echo render(__DIR__.'/errors/404.html');
    }