Minhas regras de reescrita são projetadas para ocultar minha estrutura de diretórios e facilitar a leitura de URLs. O site gcems
funciona como esperado, enquanto o site vigotwpfd
não carregará os arquivos além da primeira página, além de gerar um erro na primeira página.
Aqui está minha configuração:
Plataforma de desenvolvimento: os dois sites funcionam conforme o esperado.
Plataforma "Live / Testing":
Uma máquina executando uma instância do Apache 2.4 no Linux.
Uma conexão IP dinâmica com a Internet.
Dois nomes de host, ambos usando o duckdns.org como meu provedor de IP dinâmico. gcems.duckdns.org
e vigotwpfd.duckdns.org
configuração como hosts virtuais.
Ambos os sites estão executando o PHP 7.x
Ambos os sites são configurados de forma muito semelhante. Mesma estrutura de diretório. Estruturas de arquivos são semelhantes. Ambos usam regras de reescrita de URL, que são idênticas, com a exceção de que as regras de URL para gcems
apontam para gcems
e as regras para vigotwpfd
apontam para vigotwpfd
.
Os arquivos de configuração de domínio do Apache e os arquivos .htacess
também são idênticos, com exceção de gcems
vs vigotwpfd
.
O seguinte é uma estrutura de diretório / arquivo simplificada para ambos os domínios.
-
vigotwpfd
== > %código%
-
/var/www/vigotwpfd
== > %código%
/var/www/site/
|-- assets
| |-- css
| | '-- view.css
| |-- gallery
| | '-- blank.jpg
| |-- htc
| | '-- iepngfix.htc
| |-- images
| | '-- <image files>
| '-- js
| '-- <javascript files>
|-- classes
| |-- Bootstrap.php
| |-- Controller.php
| |-- Messages.php
| '-- Model.php
|-- controllers
| '-- <controller files>
|-- models
| '-- <models files>
|-- views
| |-- <other directories and php web pages>
| '-- main.php
|-- config.php
|-- .htaccess
'-- index.php
gcems
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
# This checks to make sure the connection is not already HTTPS - port 80 indicates a non-secured HTTP conection.
RewriteRule ^(.*)$ https://site.duckdns.org/$1 [R=301,L]
# This rule will redirect users from their original location to the same location but using HTTPS.
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&i$
/var/www/html
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName gcems.duckdns.org
ServerAlias *.gcems.duckdns.org
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/gcems_error.log
CustomLog ${APACHE_LOG_DIR}/gcems_access.log combined
</VirtualHost>
mensagem de erro encontrada em .htaccess
[Mon Nov 05 08:33:40.101435 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP Notice: Undefined index: controller in /var/www/vigotwpfd/classes/Bootstrap.php on line 38, referer: https://vigotwpfd.duckdns.org/
[Mon Nov 05 08:33:40.101670 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP Stack trace:, referer: https://vigotwpfd.duckdns.org/
[Mon Nov 05 08:33:40.101784 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP 1. {main}() /var/www/vigotwpfd/index.php:0, referer: https://vigotwpfd.duckdns.org/
[Mon Nov 05 08:33:40.101914 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP 2. Bootstrap->__construct() /var/www/vigotwpfd/index.php:60, referer: https://vigotwpfd.duckdns.org/
[Mon Nov 05 08:33:40.102365 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP Notice: Undefined index: action in /var/www/vigotwpfd/classes/Bootstrap.php on line 45, referer: https://vigotwpfd.duckdns.org/
[Mon Nov 05 08:33:40.102488 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP Stack trace:, referer: https://vigotwpfd.duckdns.org/
[Mon Nov 05 08:33:40.102556 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP 1. {main}() /var/www/vigotwpfd/index.php:0, referer: https://vigotwpfd.duckdns.org/
[Mon Nov 05 08:33:40.102630 2018] [:error] [pid 2993] [client 107.77.210.136:29694] PHP 2. Bootstrap->__construct() /var/www/vigotwpfd/index.php:60, referer: https://vigotwpfd.duckdns.org/
link
link
Aqui estão minhas teorias:
- Há um problema no sistema de reescrita de URL
- Há um problema nas configurações do apache (para o site
apache2/sites-enabled/gcems.duckdns.org.conf
ou para o próprio servidor)
- Meu código está confuso.
Eu executei vigotwpfd_error.log
passo a passo através de um depurador, mas ainda não descobri qual é o meu problema.
Informações adicionais e esclarecimentos
Na primeira iteração da minha pergunta, eu estava tentando economizar espaço e reduzir algum ruído postando o que eu achava que era absolutamente essencial. Vou postar todo o conteúdo dos arquivos nesta edição. Também vou responder algumas das perguntas e preocupações que foram apresentadas.
Q) "mas o log de erro que você postou parece sugerir que a sua reescrita de URL não está sendo processada de forma alguma? - MrWhite"
A) Este é um dos grandes enigmas de toda esta situação. Essa configuração, como fornecida, funciona no site vigotwpfd
, mas não no site vigotwpfd
. Eu estou tentando determinar qual é a diferença entre os dois.
Q) "As diretivas no arquivo gcems
que você postou estão na ordem errada e você parece ter (meio que) duplicado sua reescrita principal? (Btw, você se referiu a vigotwpfd
com uma "C" no início da sua pergunta - eu assumo que este é apenas um erro de digitação em sua pergunta?) - MrWhite ontem "
A) Eu vou consertar a duplicação que você mencionou. Para esta atualização, optei por manter o original apenas para não alterar significativamente a premissa da questão. Sim, o single "c" foi um simples erro de digitação. Eu duplamente triplo verifiquei o nome do arquivo depois que você mencionou este erro.
Comentário: MrWhite, notei que você removeu minha tag .htaccess
. A razão pela qual listei isso é devido à possibilidade de que o erro esteja em algum lugar no meu código “htaccess”
. Eu movo que a tag PHP
deve ser reintegrada.
em gcems:
se eu digitar o link , recebo a página principal do site, sem mensagens de erro.
se eu digitar o link , o site enviará uma mensagem de erro "A classe do controlador não existe" . Meu código captura a solicitação de diretório / arquivo incorreta e exibe essa mensagem em vez do PHP
.
em vigotwpfd:
Se eu digitar o link , recebo a mensagem de erro listada acima.
Se eu digitar o link , recebo um erro de apache "Não encontrado. A URL solicitada / some_random_characters não foi encontrada neste servidor "
PHP
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerAdmin webmaster@localhost
ServerName gcems.duckdns.org
# ServerAlias *.gcems.duckdns.org
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/gcems_error.log
CustomLog ${APACHE_LOG_DIR}/gcems_access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
404 error
<VirtualHost *:80>
ServerName gcems.duckdns.org
<Location />
Redirect permanent / https://gcems.duckdns.org/
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName gcems.duckdns.org
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/gcems_error.log
CustomLog ${APACHE_LOG_DIR}/gcems_access.log combined
SSLEngine On
SSLCertificateFile <directory>/fullchain.pem
SSLCertificateKeyFile <directory>/privkey.pem
</VirtualHost>
/etc/apache2/sites-enabled/gcems.duckdns.conf
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
# This checks to make sure the connection is not already HTTPS - port 80 indicates a non-secured HTTP conection.
RewriteRule ^(.*)$ https://gcems.duckdns.org/$1 [R=301,L]
# This rule will redirect users from their original location to the same location but using HTTPS.
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&i$
<IfModule mod_expires.c>
ExpiresActive ON
ExpiresDefault "access plus 1 seconds"
</IfModule>
/etc/apache2/sites-enabled/gcems.duckdns.org.ssl.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerAdmin webmaster@localhost
ServerName vigotwpfd.duckdns.org
# ServerAlias *.vigotwpfd.duckdns.org
DocumentRoot /var/www/vigotwpfd
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/vigo_error.log
CustomLog ${APACHE_LOG_DIR}/vigo_access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
/var/www/html/.htaccess
<VirtualHost *:80>
ServerName vigotwpfd.duckdns.org
<Location />
Redirect permanent / https://vigotwpfd.duckdns.org/
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName vigotwpfd.duckdns.org
# ServerAlias *.vigotwpfd.duckdns.org
DocumentRoot /var/www/vigotwpfd
ErrorLog ${APACHE_LOG_DIR}/vigo_error.log
CustomLog ${APACHE_LOG_DIR}/vigo_access.log combined
SSLEngine On
SSLCertificateFile /var/lib/dehydrated/certs/vigotwpfd.duckdns.org/fullchain.pem
SSLCertificateKeyFile /var/lib/dehydrated/certs/vigotwpfd.duckdns.org/privkey.pem
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
/etc/apache2/sites-enabled/vigotwpfd.duckdns.org.conf
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]
Options +FollowSymLinks
RewriteEngine on
LogLevel alert rewrite:trace3
RewriteCond %{SERVER_PORT} 80
# This checks to make sure the connection is not already HTTPS - port 80 indicates a non-secured HTTP conection.
RewriteRule ^(.*)$ https://vigotwpfd.duckdns.org/$1 [R=301,L]
# This rule will redirect users from their original location to the same location but using HTTPS.
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controller=$1&action=$2&i$
<IfModule mod_expires.c>
ExpiresActive ON
ExpiresDefault "access plus 1 seconds"
</IfModule>