Модификация - Переписывает / .htaccess Проблема с Apache 2.4.12

Файловая структура следующие

  • Общедоступные файлы: /home/usrname/public_html
  • МУСОРНОЕ ВЕДРО CGI, куда программное обеспечение работает: /home/usrname/public_html/cgi-bin
  • Частные файлы: /home/usrname/public_html/_private
  • Базы данных: /home/usrname/public_html/_private/data

То, что я хотел бы сделать, является преобразованием код ниже от Apache 1.3.42 к Apache 2.4.12 .htaccess файла, приличные, несколько изменений во время пути SSL что я "m, действительно становясь одержимыми главным образом.

Когда Вы пробуете любой документ путем SSL все, что я вижу, соединяют ли _private каналом а не путь public_html в источнике HTML для каких-либо типов файлов, как, CSS, js изображения, и т.д.

У меня также есть проблемы полномочий, который просит меня входить в систему во время режима SSL, это должно произойти из-за одного из другого .htaccess файлы. Это должно быть просто, все же так или иначе я не добираюсь, правила правильно встраивают просто все же.

Вот строки кода в каждом .htaccess файле.

Общедоступные файлы:/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>

У нас также есть они .htaccess файлы на учетной записи в их соответствующих путях.

Частные файлы:/home/usrname/public_html / _ частный

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

Базы данных:/home/usrname/public_html / _ частный / данные

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

МУСОРНОЕ ВЕДРО CGI:/home/usrname/public_html/cgi-bin

Options +ExecCGI
Order allow,deny
Allow from all

Возможно, существует что-то со способом, которым они все сотрудничают, которые являются проблемой теперь в Apache 2.4 +? Возможно, это - полномочия с вызовом файла от КАТАЛОГА BIN CGI, я могу переместить это в случае необходимости?

301 перенаправление является довольно простым, приличным. Синтаксису, возможно, понадобится измененный для версии, но они кажутся достаточно простыми программе. Я думаю, что существует некоторый конфликт с чем-то как Опции FollowSymLinks SymLinksIfOwnerMatch ExecCGI, Включает MultiViews или некоторую другую комбинацию; я попробовал несколько комбинаций без удачи.

В конце все, что я пытаюсь сделать, маскирует путь cgi-мусорного-ведра полного пути программного обеспечения, все же обеспечивает старый путь назад как 301 перенаправление, таким образом, мы не теряем ссылок, которые могут быть индексированы и или отмечены.

.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

или в режиме 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

Я нашел, изменяю ли я следование %{REQUEST_FILENAME} кому: %{REQUEST_URI} это, по крайней мере, позволяет всему работать, если Вам не нужен путь SSL, он затем показывает путь _private для любых типов файлов, таких как CSS, js, изображения и так далее.

Я надеюсь, что предоставил достаточно информации, чтобы помочь решить этот противный вопрос, печально я очень неопытен с mod_rewrites, и таким образом это походит своего рода на черную магию прямо сейчас. Это может занять недели для решения простых приличных вещей самостоятельно.

Любая справка значительно ценится, я так хотят мигрировать прочь Apache 1.3.42, поскольку это - запоздалый путь и после того как эта проблема была решена, я могу.

1
задан 16 October 2017 в 01:26
1 ответ

Я обнаружил, что если я изменю следующее с % {REQUEST_FILENAME} на % {REQUEST_URI} , то, по крайней мере, все будет работать

Если этим вы имеете в виду следующий блок кода (предположительно в корневом файле .htaccess ):

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]

Тогда это имеет лишь небольшой смысл. Проблема в том, что эти директивы не работали бы и на Apache 1.3, если бы они использовались в .htaccess .

«Проблема» в том, что содержимое этого файла .htaccess похоже, что он был взят прямо из конфигурации сервера. В контексте .htaccess эти директивы никогда не будут совпадать, независимо от того, был ли REQUEST_FILENAME изменен на REQUEST_URI . При использовании в конфигурации сервера REQUEST_FILENAME совпадает с REQUEST_URI , но в .htaccess REQUEST_FILENAME - это абсолютный путь файловой системы, которому соответствует запрос . Таким образом, использование REQUEST_URI в этом контексте просто «менее ошибочно», оно все равно неверно.

Перезапись в / home / usrname / public_html / ... (абсолютный путь к файловой системе) недопустим в .htaccess . В случае успешного выполнения это приведет к неверному запросу 400.

Однако эти директивы на самом деле не выглядят так, как будто они что-то делают. Они просто перезаписывают запрос обратно в тот же файл - что не имеет особого смысла - так что трудно понять, в чем заключаются намерения этих директив? Возможно, они предназначены для того, чтобы остановить выполнение других директив (например, для предотвращения передачи запросов в сценарий CGI)?

некоторый конфликт с чем-то вроде Options FollowSymLinks SymLinksIfOwnerMatch ExecCGI Includes MultiViews

Вам понадобится FollowSymLinks или SymLinksIfOwnerMatch , установленный для работы mod_rewrite. И вам может потребоваться отключить MultiViews .

1
ответ дан 4 December 2019 в 00:08

Теги

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