【问题标题】:How do I adjust my .htaccess file to allow a full functional website in a subfolder如何调整我的 .htaccess 文件以允许子文件夹中的全功能网站
【发布时间】:2017-01-13 01:13:00
【问题描述】:

我有一个运行良好的网站。我想在子文件夹而不是子域中创建另一个。这样做的主要考虑因素是我需要为这两个站点安装 tls cert。而且由于父网站使用 tls 证书,我希望它能够覆盖孩子(我现在买不起另一个)。问题是我在两个网站中都有 .htaccess 文件,看起来像这样:

Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

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

父网站仍在运行,但我无法访问“子”网站。

编辑:

虽然我不认为路由是问题,但我应某人的要求将我的机制发布在这里

class App{

    protected $controller = 'welcome';
    protected $method = 'index';
    protected $params;

  public function __construct(){        
    $url = $this->parseURL();

    if( isset( $url[0] ) && file_exists( 'app/controllers/' . strtolower( $url[0] ) . '.php' ) )
    {
        $this->controller = $url[0];
        unset( $url[0]);
    }

    require_once 'app/controllers/' . strtolower( $this->controller ). '.php';

    $this->controller = new $this->controller;

    if( isset( $url[1] ) )
    {
        if( method_exists( $this->controller, $url[1] ) )
        {
            $this->method = $url[1];
            unset( $url[1] );
        }
    }

    $this->params = $url ? array_values( $url ) : [];

    call_user_func_array( [ $this->controller, $this->method ], $this->params );
}

 protected function parseURL(){

    if( isset( $_GET['url'] ) ){

        //return $url = explode( '/', filter_var( rtrim( $_GET['url'], '/') ), FILTER_SANITIZE_URL );
        return $url = explode( '/', filter_var( rtrim( $_GET['url'], '/' ), FILTER_SANITIZE_URL ) );
    }
  }
}

这是基本的控制器类:

abstract class Controller{

    protected $response = array();

    protected $dbInstance = false;

   protected function model( $model ){
    require_once 'app/models/' . strtolower( $model ) . '.php';
    return new $model();
  }

   protected function view( $view, $data = [] ){

    require_once 'app/views/' . strtolower( $view ) . '.php';
  }
}

【问题讨论】:

  • 你在使用框架吗?
  • @ka_lin 不,我使用自己定制的 MVC
  • 然后发布您的自定义路由机制......我们在这里处于黑暗中
  • @ka_lin,我已按照您的建议在更新中包含了路由机制。

标签: php apache .htaccess ssl


【解决方案1】:

因此,您需要从您的 .htaccess 中排除一个子文件夹,因为您有一个子域,为此只需排除 directory1directory2(作为前任):

Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^/?(directory1|directory2)/ !-d

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

P.S:未经测试,但应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    相关资源
    最近更新 更多