Como permitir que as declarações de rotas carreguem visões em um arquivo separado no Apache2?

1

Meu site com meu próprio framework PHP permite ter URLs agradáveis para páginas:

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

Funciona bem na configuração local do Vagrant, mas depois que eu carrego meu site para o Apache2, ele é direcionado para esses sites:

  

O URL solicitado / sobre não foi encontrado neste servidor

     

Os URLs / contatos solicitados não foram encontrados neste servidor.

Provavelmente porque a prioridade é procurar um arquivo dentro das pastas "about" e "contacts" em vez de ouvir o arquivo /index.php que define as rotas e carrega as exibições para as páginas "about" ou "contact".

A visualização em https://www.myurl.com homepage funciona perfeitamente, o problema ocorre indo para páginas declaradas em URI após https://www.myurl.com/.....

Este é o meu arquivo .conf

ServerAdmin [email protected]
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]
    
por Lukas 07.09.2017 / 10:35

2 respostas

1

Depois de adicionar essas linhas ao meu arquivo .htaccess, o roteamento estava finalmente funcionando:

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

Antes, quando eu estava indo para https://www.myurl.com/about , ele estava procurando por um arquivo index.php dentro do diretório /var/www/myurl.com/public_html/about/ .

Com o novo código em .htaccess quando eu vou para https://www.myurl.com/about , o arquivo .htaccess prioriza primeiro a busca pela visão como ela é definida no arquivo index.php e se ela não carregar nenhuma visão, ela procura por um diretório com um nome dado.

    
por Lukas 07.09.2017 / 12:36
1

Eu não tenho uma idéia exata do porque a configuração acima funciona no Vagrant, mas não no Apache nativo. Minha experiência mostra que, quando a configuração do Apache não é rigorosa o suficiente, às vezes funciona e às vezes não funciona. Especialmente quando você migrou de uma para outra versão do Apache. Também li várias vezes que é preferível evitar o uso de regras de reconfiguração, se for possível.

Então eu prefiro configurar meu host virtual com arquivo de configuração separado, que deve ser assim:

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 [email protected]
        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 [email protected]
        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>

Crie um novo arquivo de configuração: /etc/apache2/sites-available/myurl.com.conf . Onde você deve colar e modificar as linhas acima.

Desative o arquivo de configuração atual. Provavelmente você deve usar a2dissite . Em seguida, ative o novo arquivo de configuração: sudo a2ensite myurl.com.conf . E reinicie o Apache. Eu acho que deveria funcionar agora.

Além disso, nas configurações acima, o estande http://myurl.com e http://www.myurl.com redirecionará todas as solicitações para https://myurl.com . No entanto, o endereço https://www.myurl.com estará acessível quando for solicitado. Se você quiser redirecionamentos como estes:

  • http://myurl.com a https://myurl.com e

  • http://www.myurl.com to https://www.myurl.com .

Você deve remover a diretiva ServerAlias da definição <VirtualHost *:80> e criar outra:

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

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

...
    
por pa4080 07.09.2017 / 11:53