/index.php сохраняется в приложении 2 Laravel, несмотря на виртуальный хост Apache и хостинг субдоменов .htaccess - PullRequest
0 голосов
/ 01 сентября 2018

Пожалуйста, у меня возникли проблемы с удалением файла index.php в маршруты для моих приложений Laravel. У меня не было успеха исправить это. Когда я использую IP-адрес сервера, все работает нормально, но когда я использую имена поддоменов, они работают для /, но для других маршрутов или URL, таких как / login, я должен добавить /index.php/login, прежде чем он будет работать, иначе он не будет работать. , Ниже приведен пример текущих настроек или настроек моего сервера.

Site Works when index.php is used in the URL

Site Works when index.php is used in the url

 Site doesn't work when index.php is removed from the Url

enter image description here

 But it works well when i use the IP address directly. 
 but in this case it serves the laravel application hosted in the second subdomain. I just don't know why

enter image description here

ОСНОВНОЙ САЙТ

domain.com
Apache CONF FILE (это уже отлично работает)

   <VirtualHost *:80>
    ServerAdmin admin@domain.com
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot /var/www/domain.com/public_html

    <Directory /var/www/html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <IfModule mod_dir.c>
        DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
    </IfModule>

     RewriteEngine on
     RewriteCond %{SERVER_NAME} =www.domain.com [OR]
     RewriteCond %{SERVER_NAME} =domain.com
     RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
  </VirtualHost>

ПЕРВЫЙ ПОДВОДНОЙ САЙТ APACHE CONF:

test1.domain.com

/ вар / WWW / test1.domain.com / public_html

// APACHE CONF FILE

/ и т.д. / apache2 / сайты-доступные / test1.domain.com.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName test1.domain.com
    ServerAlias www.test1.domain.com
    DocumentRoot /var/www/test1.domain.com/public_html

    <Directory /var/www/test1.domain.com/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <IfModule mod_dir.c>
        DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
    </IfModule>

   RewriteEngine on
   RewriteCond %{SERVER_NAME} =test1.domain.com
   RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
  </VirtualHost>

//. Htaccess для test1.domain.com

IfModule mod_rewrite.c>
 <IfModule mod_negotiation.c>
    Options -MultiViews
 </IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

ВТОРОЙ ПОДДОМИННЫЙ САЙТ APACHE CONF:

test2.domain.com /var/www/test2.domain.com/public_html

/ APACHE CONF FILE /etc/apache2/sites-available/test2.domain.com.conf

  <VirtualHost *:80>
    ServerAdmin admin@test2.domain.com
    ServerName test2.domain.com
    ServerAlias test2.domain.com
    DocumentRoot /var/www/test2.domain.com/public_html

    <Directory /var/www/test2.domain.com/public_html/>
       Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <IfModule mod_dir.c>
        DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
    </IfModule>

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =test2.domain.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
   </VirtualHost>

.htaccess

test2.domain.com Конфигурация файла htacess Опции -MultiViews -Indexes

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Окружающая среда

Ubuntu 16.04 
Server PHP 7.2 
Laravel Version 5.4.30

РЕЗУЛЬТАТ ВСЕГО ЭТИХ

 domain.com //WORKS

 test1.domain.com // WORKS
but test1.domain.com/login  // Does'nt work
instead test1.domain.com/index.php/login // works

test2.domain.com // WORKS
but test2.domain.com/login  // Does'nt work
instead test2.domain.com/index.php/login // works

but I realized that
the Ip address works well without the need for index.php
http://server-ip-address // works but serves the app in test2.domain.com
http://server-ip-address/login  // also Works well which is what I expect in the two subdomain test1.domain.com and test2.com

ЗАПРОС ПОЖАЛУЙСТА

Мне нужно избавиться от необходимости использовать index.php в маршруте. Пожалуйста, любая идея приветствуется. Возможно, свежие Глаза помогут мне определить способы исправить это.

ИССЛЕДОВАНИЯ, КОТОРЫЕ Я СДЕЛАЛ Я уже пробовал следующие ссылки. все еще трудно выяснить, что не так, чтобы исправить это.

htaccess для домена и субдомена с laravel htaccess для домена и субдомена с laravel

виртуальный хост apache и «динамические» домены

Настройка корневого документа для проекта Laravel на виртуальном хосте Apache виртуальный хост apache и «динамические» домены

СНОВА. ИСПРАВЛЕНИЕ Для устранения необходимости включать index.php в МАРШРУТ Web-ПРИЛОЖЕНИЯ. СПАСИБО ЗА ПРЕДЕЛА

1 Ответ

0 голосов
/ 03 сентября 2018

Мне удалось решить проблему.

Первое: файлы .htaccess не читались. несмотря на все, что я сделал выше, это подтвердилось после того, как я инструкции в ссылке ниже, поместив бред в файлах .htaccess и там не было 500 ошибок отображения состояния

.htaccess файл не читается («Опции -индексы» в файле .htaccess не работают)

Но все равно это не сработало. Я начал проверять все файлы в каталоге / etc / apache2 / site-enabled и обнаружил, что, поскольку я установил SSL Encrypt на моем сервере до настройки приложений Laravel, используемые файлы конфигурации генерируются Encrypt для доменов, найденных в

/ etc / apache2 / sites-enabled / test1.domain.com-le-ssl.conf (ssl - созданная конфигурация)

/ etc / apache2 / sites-enabled / test1.domain.com.conf (обычная конфигурация)

и

/ etc / apache2 / sites-enabled / test2.domain.com-le-ssl.conf (сгенерированный ssl config)

/ etc / apache2 / sites-enabled / test1.domain.com.conf (обычная конфигурация)

а также

/ и т.д. / apache2 / сайты с поддержкой / domain.com-ле-ssl.conf

/ и т.д. / apache2 / сайты с поддержкой / domain.com.conf

Итак, я просмотрел файлы и обнаружил, что Document Root указывает на другое путь из каталога, поэтому файлы htaccess не читаются, но были прочитаны, когда я использовал IP-адрес, который указывал на второй поддомен

ПРИМЕЧАНИЕ. ЭТО НАХОДИТСЯ В КОНФИГ-ФАЙЛАХ SSL APACH, НЕ В ФАЙЛАХ КОНФИГ. NORMAL APACH DocumentRoot /var/www/test1.domain.com/public_html

<Directory /var/www/html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

В заключение, это последний пример обновления, в котором исправлено

<IfModule mod_ssl.c>
   <VirtualHost *:443>
     ServerAdmin admin@test1.domain.com
     ServerName test1.domain.com
     ServerAlias www.test1.domain.com
     DocumentRoot /var/www/test1.domain.com/public_html

    <Directory /var/www/test1.domain.com/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <IfModule mod_dir.c>
        DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
    </IfModule>

  Include /etc/letsencrypt/options-ssl-apache.conf
  SSLCertificateFile /etc/letsencrypt/live/test1.domain.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/test1.domain.com/privkey.pem
  </VirtualHost>
 </IfModule>

РЕЗУЛЬТАТ

Мои маршруты и URL работали так, как я ожидал. поскольку файлы .htaccess теперь правильно читаются apache в соответствующих каталогах

ИЗУЧЕННЫЕ УРОКИ

  1. Настройте свои файлы Apache Перед установкой Encrypt, так как он дублирует файлы и добавляет необходимые конфигурации для обеспечения его безопасности.
  2. Или Перекрестная проверка / Перепроверьте и обычные файлы, и файлы конфигурации SSL, потому что вы определенно хотите, чтобы ваш сайт был защищен и работал должным образом.
  3. Дважды проверьте DocumentRoot и Каталог и убедитесь, что они указывают на то же место назначения или как и ожидалось.

Это мои уроки от всего этого. Надеюсь, кто-то еще выиграет от этого. Спасибо.

...