Как разрешить объявлениям маршрутов загружать представления в отдельный файл в Apache2?

Мой сайт с моей собственной фреймворком PHP позволяет иметь хорошие URL-адреса для страниц:

About Us => https://www.myurl.com/about Contacts => https://www.myurl.com/contacts

Он хорошо работает в локальной настройке Vagrant, но как только я загружу свой сайт в Apache2, вы попадаете на эти сайты:

Запрошенный URL-адрес не найден на этом сервере Запрошенный URL-адрес / контакты не найден на этом сервере.

Возможно, потому что приоритетом является поиск файла внутри папок «about» и «contacts» вместо прослушивания файла /index.php, который определяет маршруты и загружает представления для страниц или контактов.

]

Просмотр на домашней странице https://www.myurl.com прекрасно работает, проблема возникает при переходе на страницы, объявленные в URI после https://www.myurl.com/.....

Это мой файл .conf

ServerAdmin info@myurl.com ServerName myurl.com ServerAlias www.myurl.com DocumentRoot /var/www/myurl.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =www.myurl.com [OR] RewriteCond %{SERVER_NAME} =myurl.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
1
задан 7 September 2017 в 12:08

6 ответов

После добавления этих строк в мой .htaccess файл, наконец, работал:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

До того, как я отправился в https://www.myurl.com/about, он искал файл index.php внутри /var/www/myurl.com/public_html/about/.

С новым кодом в .htaccess, когда я перехожу к https://www.myurl.com/about, файл .htaccess сначала приостанавливает поиск для представления, как он определен в файле index.php, и если он не загружает view, он ищет каталог с заданным именем.

1
ответ дан 22 May 2018 в 18:42
  • 1
    Я просто думал о том, что вам нужно RewriteRule как это :) Потому что я не мог себе представить, как программа php будет обрабатывать запросы, которые не указывают на это. – pa4080 7 September 2017 в 13:41

После добавления этих строк в мой .htaccess файл, наконец, работал:

Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]

До того, как я отправился в https://www.myurl.com/about, он искал файл index.php внутри /var/www/myurl.com/public_html/about/.

С новым кодом в .htaccess, когда я перехожу к https://www.myurl.com/about, файл .htaccess сначала приостанавливает поиск для представления, как он определен в файле index.php, и если он не загружает view, он ищет каталог с заданным именем.

1
ответ дан 18 July 2018 в 07:17

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

Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]

раньше, когда я собиралась https://www.myurl.com/about это был поиск файла index.php внутри каталога /var/www/myurl.com/public_html/about/.

с новый код .реврайт, когда я иду https://www.myurl.com/about на .файл htaccess сначала отдает приоритет поиску посмотреть, как это определено в файле index.php и если он не загружается в любом виде, он ищет каталог с заданным именем.

1
ответ дан 24 July 2018 в 18:46

У меня нет точной идеи, почему эта конфигурация работает на Vagrant, но не на родном Apache. Мой опыт показывает мне, что, когда конфигурация Apache не является достаточно строгой, она работает иногда, а иногда она не работает. Особенно, когда вы перешли от одной версии к другой версии Apache. Также несколько раз я читал, что лучше избегать использования правил перезаписи, если это возможно.

Поэтому я бы предпочел настроить мой виртуальный хост с отдельным конфигурационным файлом, который должен выглядеть так: [ ! d1]

ServerName myurl.com # Remove this line if there is another ServerName directive at the global level, or change it to 'ServerName localhost' if you want.

<VirtualHost *:80>  
        ServerName myurl.com
        ServerAlias www.myurl.com
        ServerAdmin info@myurl.com
        ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log
        CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined   

        # Redirect Requests to HTTPS
        Redirect permanent "/" "https://myurl.com/"
</VirtualHost>

<IfModule mod_ssl.c>    
<VirtualHost _default_:443>
        ServerName myurl.com
        ServerAlias www.myurl.com
        ServerAdmin info@myurl.com
        ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log
        CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined   

        DocumentRoot /var/www/myurl.com/public_html
        <Directory /var/www/myurl.com/public_html>
               Options None FollowSymLinks
               AllowOverride None 
               # Use 'AllowOverride All' to enable all .htaccess overrides
               DirectoryIndex index.html index.php
               Order allow,deny
               Allow from all
               Require all granted
        </Directory>

        SSLEngine on
        SSLCertificateFile /path/to/your/cert.file
        SSLCertificateKeyFile /path/to/your/privkey.file
        SSLCertificateChainFile /path/to/your/chain.file
</VirtualHost>
</IfModule>

Создайте новый файл конфигурации: /etc/apache2/sites-available/myurl.com.conf. Где вы должны вставлять и изменять приведенные выше строки.

Отключить текущий файл конфигурации. Вероятно, вы должны использовать a2dissite. Затем включите новый файл конфигурации: sudo a2ensite myurl.com.conf. И перезапустите Apache. Думаю, теперь это должно сработать.

Кроме того, в указанных выше конфигурациях стенд http://myurl.com и http://www.myurl.com перенаправляет все запросы на https://myurl.com. Однако адрес https://www.myurl.com будет доступен, когда он будет запрошен. Если вы хотите переназначить следующие:

http://myurl.com на https://myurl.com и http://www.myurl.com на https://www.myurl.com.

Вы должны удалить директиву ServerAlias из определения <VirtualHost *:80> и создать другую:

<VirtualHost *:80>  
        ServerName myurl.com
        ...
        Redirect permanent "/" "https://myurl.com/"
</VirtualHost>

<VirtualHost *:80>  
        ServerName www.myurl.com
        ...
        Redirect permanent "/" "https://www.myurl.com/"
</VirtualHost>

...
1
ответ дан 22 May 2018 в 18:42
  • 1
    Большое спасибо за ваш ответ, я много изучил его, прежде чем обнаружил свою проблему. – Lukas 7 September 2017 в 13:37

У меня нет точной идеи, почему эта конфигурация работает на Vagrant, но не на родном Apache. Мой опыт показывает мне, что, когда конфигурация Apache не является достаточно строгой, она работает иногда, а иногда она не работает. Особенно, когда вы перешли от одной версии к другой версии Apache. Также несколько раз я читал, что лучше избегать использования правил перезаписи, если это возможно.

Поэтому я бы предпочел настроить мой виртуальный хост с отдельным конфигурационным файлом, который должен выглядеть так: [ ! d1] ServerName myurl.com # Remove this line if there is another ServerName directive at the global level, or change it to 'ServerName localhost' if you want. <VirtualHost *:80> ServerName myurl.com ServerAlias www.myurl.com ServerAdmin info@myurl.com ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined # Redirect Requests to HTTPS Redirect permanent "/" "https://myurl.com/" </VirtualHost> <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName myurl.com ServerAlias www.myurl.com ServerAdmin info@myurl.com ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined DocumentRoot /var/www/myurl.com/public_html <Directory /var/www/myurl.com/public_html> Options None FollowSymLinks AllowOverride None # Use 'AllowOverride All' to enable all .htaccess overrides DirectoryIndex index.html index.php Order allow,deny Allow from all Require all granted </Directory> SSLEngine on SSLCertificateFile /path/to/your/cert.file SSLCertificateKeyFile /path/to/your/privkey.file SSLCertificateChainFile /path/to/your/chain.file </VirtualHost> </IfModule>

Создайте новый файл конфигурации: /etc/apache2/sites-available/myurl.com.conf. Где вы должны вставлять и изменять приведенные выше строки.

Отключить текущий файл конфигурации. Вероятно, вы должны использовать a2dissite. Затем включите новый файл конфигурации: sudo a2ensite myurl.com.conf. И перезапустите Apache. Думаю, теперь это должно сработать.

Кроме того, в указанных выше конфигурациях стенд http://myurl.com и http://www.myurl.com перенаправляет все запросы на https://myurl.com. Однако адрес https://www.myurl.com будет доступен, когда он будет запрошен. Если вы хотите переназначить следующие:

http://myurl.com на https://myurl.com и http://www.myurl.com на https://www.myurl.com.

Вы должны удалить директиву ServerAlias из определения <VirtualHost *:80> и создать другую:

<VirtualHost *:80> ServerName myurl.com ... Redirect permanent "/" "https://myurl.com/" </VirtualHost> <VirtualHost *:80> ServerName www.myurl.com ... Redirect permanent "/" "https://www.myurl.com/" </VirtualHost> ...
1
ответ дан 18 July 2018 в 07:17

у меня нет точного понятия, почему данная конфигурация работает на бродягу, а не на родной Апач. Мой опыт показывает мне, что если конфигурация Апача не достаточно строга, она иногда работает а иногда не работает. Особенно когда вы мигрировали с одного на другой сервера Apache версии. Также несколько раз я читал, что желательно избегать использования правила переписать, если это возможно.

так что я бы предпочел, чтобы настроить виртуальный хост в отдельный конфигурационный файл, который должен выглядеть так:

ServerName myurl.com # Remove this line if there is another ServerName directive at the global level, or change it to 'ServerName localhost' if you want. <VirtualHost *:80> ServerName myurl.com ServerAlias www.myurl.com ServerAdmin info@myurl.com ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined # Redirect Requests to HTTPS Redirect permanent "/" "https://myurl.com/" </VirtualHost> <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName myurl.com ServerAlias www.myurl.com ServerAdmin info@myurl.com ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined DocumentRoot /var/www/myurl.com/public_html <Directory /var/www/myurl.com/public_html> Options None FollowSymLinks AllowOverride None # Use 'AllowOverride All' to enable all .htaccess overrides DirectoryIndex index.html index.php Order allow,deny Allow from all Require all granted </Directory> SSLEngine on SSLCertificateFile /path/to/your/cert.file SSLCertificateKeyFile /path/to/your/privkey.file SSLCertificateChainFile /path/to/your/chain.file </VirtualHost> </IfModule>

создать новый файл конфигурации: /etc/apache2/sites-available/myurl.com.conf. Где вы должны вставить и изменить строчку выше.

отключаем текущий файл конфигурации. Вероятно, вы должны использовать a2dissite. Затем включить новый файл конфигурации: sudo a2ensite myurl.com.conf. И перезапустить Apache. Я думаю, что это должно работать.

кроме того, в рамках вышеуказанного стенда конфигураций http://myurl.com и http://www.myurl.com будет перенаправлять все запросы к https://myurl.com. Однако адрес [F9] и будут доступны при запросе. Если вы хотите избавиться как эти:

[F10] для того, чтобы на [F11] и [F12] для [от f13].

Вы должны удалить директивы ServerAlias от <VirtualHost *:80> определение и создать еще одну:

<VirtualHost *:80> ServerName myurl.com ... Redirect permanent "/" "https://myurl.com/" </VirtualHost> <VirtualHost *:80> ServerName www.myurl.com ... Redirect permanent "/" "https://www.myurl.com/" </VirtualHost> ...
1
ответ дан 24 July 2018 в 18:46
  • 1
    Большое спасибо за ваш ответ, я много изучил его, прежде чем обнаружил свою проблему. – Lukas 7 September 2017 в 13:37

Другие вопросы по тегам:

Похожие вопросы: