Конфигурация Laravel .htaccess в папках - PullRequest
0 голосов
/ 05 декабря 2018

Ситуация: веб-проект, в котором находится структура папки.

  • www
    • 2015
    • 2016
    • 2017
    • 2018
    • текущий

Каждая папка представляет веб-сайт того года, в «текущей» папке это веб-сайт, который должен отображаться при переходе на страницуwww.mydomain.com.Цель состоит в том, что если вы зайдете на сайт www.mydomain.com/2017, вы увидите веб-сайт 2017 года.

В корневой папке есть файл .htaccess, который гарантирует, что при переходе к «/»Вы будете перенаправлены на текущий.

Я борюсь с файлом .htaccess, который я должен поместить в папку "2017" (которая является приложением laravel).

.htaccess файл в папке www

<IfModule mod_rewrite.c>
   Options +SymLinksIfOwnerMatch
   RewriteEngine on

   RewriteRule ^(.*)$ current/$1 [L]
</IfModule>

.htaccess файл в папке 2017 года

<IfModule mod_rewrite.c>
   Options +SymLinksIfOwnerMatch
   RewriteBase /2017
   RewriteEngine on
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Текущий результат: когда я захожу на сайт www.mydomain.com/2017, я захожу в папку 2017 года, но она переходит на страницу «2017» 2017 годаЧтобы проверить это, я просто добавил это в свой маршрут web.php:

Route::get('/{page}', array('as'=>'renderpage',function ($page) {
    dd('I am here and the page you request is '.$page);
}));

, что приводит к: «Я здесь, и страница, которую вы запрашиваете, 2017»

Короче говоря: как я могу удалить «2017» из URL в файле .htaccess, чтобы laravel интерпретировал www.mydomain.com/2017 как корень папки 2017.Желательно, чтобы это было сделано в файле .htaccess в папке 2017.

edit: я изменил файл .htaccess в папке 2017 на следующее:

<IfModule mod_rewrite.c>
   Options +SymLinksIfOwnerMatch
   RewriteBase /2017
   RewriteEngine on
   RewriteRule ^(/.*|)$ public/$1 [L,NC,R=301]
</IfModule>

теперь он работает, кромев URL вы теперь видите www.mydomain.com/2017/public, как я могу удалить "public" из URL?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Без касания кода laravel, но с конфигурацией nginx:

server {
    listen *:8080;
    server_name 2016.test.test;

    root /var/www/html/2016;
    index index.html index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_index   index.php;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }
} 

 server {
    listen                *:80;

    server_name           www.test.test;
    client_max_body_size 1m;

    root /var/www/html/current;
    index  index.html index.htm;

    location /2016/ {
        rewrite /2016/(.*) /$1 break;

        proxy_pass          http://2016.test.test:8080;
        proxy_redirect      off;
        proxy_set_header    Host $host;
    }
}

Структура папки:

.
├── 2015            
│   └── index.html  
├── 2016            
│   ├── index.html  
│   └── index.php   
├── 2017            
│   └── index.html  
├── current         
│   ├── index.html  
│   └── test.html   
└── index.html

index.php:

 <?php
     var_dump($_SERVER);
 ?> 

результат вызова:http://www.test.test/2016/sample/foo/bar ...

  ...
  'SCRIPT_FILENAME' => string '/var/www/html/2016/index.php' (length=28)
  'REDIRECT_STATUS' => string '200' (length=3)
  'SERVER_NAME' => string '2016.test.test' (length=14)
  'SERVER_PORT' => string '8080' (length=4)
  'SERVER_ADDR' => string '127.0.0.1' (length=9)
  'REMOTE_PORT' => string '48598' (length=5)
  'REMOTE_ADDR' => string '127.0.0.1' (length=9)
  'SERVER_SOFTWARE' => string 'nginx/1.14.0' (length=12)
  'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
  'REQUEST_SCHEME' => string 'http' (length=4)
  'SERVER_PROTOCOL' => string 'HTTP/1.0' (length=8)
  'DOCUMENT_ROOT' => string '/var/www/html/2016' (length=18)
  'DOCUMENT_URI' => string '/index.php' (length=10)
  'REQUEST_URI' => string '/sample/foo/bar' (length=15)
  'SCRIPT_NAME' => string '/index.php' (length=10)
  ...

вы видите REQUEST_URI это просто '/ sample / foo / bar' без вашего года

Этот пример жестко закодировандо 2016 года вы можете легко использовать регулярное выражение для местоположения в году, например: 20[0-9]{2} и заменить соответствие соответствующей переменной ($ 1 или что-то вроде этого)

0 голосов
/ 05 декабря 2018

Может быть, это правильный путь в laravel:

Вы можете изменить корневой каталог на вашем контроллере или маршруте, используя

$this->app->bind('path.public', function() {
  return base_path().'/public_html';
});

, вы можете вставить туда абсолютный путья думаю.

Выезд

https://laravel.com/docs/5.7/helpers#method-public-path

https://laravel.com/docs/5.7/helpers#method-base-path

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...