Mod - Reescreva / .htaccess Problema com o Apache 2.4.12

1

A estrutura do arquivo é a seguinte

  • Arquivos públicos: /home/usrname/public_html
  • CGI BIN, onde o software está sendo executado: /home/usrname/public_html/cgi-bin
  • Arquivos privados: /home/usrname/public_html/_private
  • Bancos de dados: /home/usrname/public_html/_private/data

O que eu gostaria de fazer é converter o código abaixo do Apache 1.3.42 para um arquivo .htaccess Apache 2.4.12, aparentemente algumas mudanças durante o caminho SSL são o que eu realmente estou ficando preso principalmente. / p>

Quando você tenta qualquer documento com o caminho SSL, tudo o que vejo é o caminho _private e não o caminho public_html na fonte HTML para qualquer tipo de arquivo, como, CSS, imagens js, etc.

Eu também tenho problemas de permissão, que está pedindo para eu fazer o login durante o modo SSL, isso deve ser devido a um dos outros arquivos .htaccess . Deve ser simples, mas de alguma forma eu não estou conseguindo as regras corretamente na linha ainda.

Aqui estão as linhas de código em cada arquivo .htaccess.

Arquivos públicos: / home / usrname / public_html

RewriteEngine On

RewriteCond %{HTTP_HOST} ^99\.00\.99\.000$
RewriteRule ^/?(.*)$ http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^/?(.*)$ http://www.example.com/$1 [R=301,L]

RewriteCond /home/usrname/public_html/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /home/usrname/public_html/$1 [L]
RewriteCond /home/usrname/public_html/_private/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /home/usrname/public_html/_private/$1 [L]
RewriteRule ^(.+) - [PT]

DirectoryIndex home.html index.htm index.html default.htm Default.htm
Action cgi-ccd /cgi-bin/aws.emp
AddHandler cgi-ccd html
AddHandler default-handler .gif
AddHandler default-handler .jpg

<FilesMatch "\.(inx|weo|lco|dbo|cdo|fpo|dao)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>

<Files 403.shtml>
order allow,deny
allow from all
</Files>

Também temos esses arquivos .htaccess na conta em seus respectivos caminhos.

Arquivos privados: / home / usrname / public_html / _private

AuthUserFile .htpasswd
AuthGroupFile /dev/null
AuthName Administrator
AuthType Basic
<limit GET>
require valid-user
</limit>

Bancos de dados: / home / usrname / public_html / _private / data

AuthUserFile .htpasswd
AuthGroupFile /dev/null
AuthName Administrator
AuthType Basic
<limit GET>
require valid-user
</limit>

CGI BIN: / home / usrname / public_html / cgi-bin

Options +ExecCGI
Order allow,deny
Allow from all

Talvez haja algo com o modo como todos funcionam juntos, que é o problema agora no Apache 2.4+? Talvez seja as permissões de chamar o arquivo do diretório CGI-BIN, posso mover isso, se necessário?

Os redirecionamentos 301 são bastante simples, aparentemente. A sintaxe pode ser alterada para a versão, mas elas parecem simples o suficiente para serem programadas. Eu acho que há algum conflito com algo como Opções FollowSymLinks SymLinksIfOwnerMatch ExecCGI Inclui MultiViews ou alguma outra combinação; Eu tentei várias combinações sem sorte.

No final, tudo o que estou tentando fazer é mascarar o caminho completo do caminho cgi-bin do software, mas fornecer o caminho antigo de volta como um redirecionamento 301, para que não percamos nenhum link que possa ser indexado e marcado.

.i.e.

From: http://www.example.com/cgi-bin/aws.emp/any-document-file-name.html
To: http://www.example.com/any-document-file-name.html

ou no modo SSL.

From: https://www.example.com/cgi-bin/aws.emp/any-document-file-name.html
To: https://www.example.com/any-document-file-name.html

Descobri que se eu alterar o seguinte de %{REQUEST_FILENAME} para %{REQUEST_URI} que pelo menos permite que tudo funcione, a menos que você precise do caminho SSL, ele mostrará o caminho _private para qualquer tipo de arquivo, como css, js, imagens e assim por diante.

Espero ter fornecido informações suficientes para ajudar a resolver este problema, infelizmente eu sou muito inexperiente com mod_rewrites e, portanto, parece um pouco de magia negra agora. Isso pode levar semanas para resolver simples coisas aparentemente sozinhas.

Qualquer ajuda é muito apreciada, eu quero migrar para fora do Apache 1.3.42 já que está muito atrasado e assim que este problema for resolvido, eu posso.

    
por ingenuitor 13.05.2015 / 03:41

1 resposta

0

I found if I change the following from %{REQUEST_FILENAME} to %{REQUEST_URI} that at least allows everything to work

Se por isso você está se referindo ao seguinte bloco de código (supostamente na raiz .htaccess file):

RewriteCond /home/usrname/public_html/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /home/usrname/public_html/$1 [L]
RewriteCond /home/usrname/public_html/_private/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /home/usrname/public_html/_private/$1 [L]
RewriteRule ^(.+) - [PT]

Então isso só faz um pouco de sentido. O problema é que essas diretivas também não funcionariam no Apache 1.3, se usadas em .htaccess .

O "problema" é que o conteúdo desse arquivo .htaccess parece ter sido retirado diretamente da configuração do servidor. Em um contexto .htaccess , essas diretivas nunca corresponderiam, independentemente de REQUEST_FILENAME ter sido alterado para REQUEST_URI . Quando usado na configuração do servidor, REQUEST_FILENAME é o mesmo que REQUEST_URI , mas em .htaccess REQUEST_FILENAME é o caminho absoluto do sistema de arquivos para o qual a solicitação é mapeada. Portanto, usar REQUEST_URI neste contexto é apenas "menos errado", mas ainda não está correto.

A reconfiguração para /home/usrname/public_html/... (um caminho absoluto do sistema de arquivos) é inválida em .htaccess . Isso resultaria em um 400 Bad Request se executado com sucesso.

No entanto, essas diretrizes não parecem realmente estar fazendo nada. Eles simplesmente reescrevem o pedido de volta ao mesmo arquivo - o que não faz muito sentido - por isso é difícil ver qual é a intenção dessas diretivas? Eles talvez pretendem impedir que outras diretivas sejam executadas (por exemplo, para impedir que solicitações sejam passadas para o script CGI)?

some conflict with something like Options FollowSymLinks SymLinksIfOwnerMatch ExecCGI Includes MultiViews

Você precisará do FollowSymLinks ou SymLinksIfOwnerMatch definido para o mod_rewrite funcionar. E você pode precisar desabilitar MultiViews .

    
por 16.10.2017 / 00:56