Это дополнительный вопрос к моему предыдущему вопрос на этом сайте. Может быть, мне следует указать, что сервер Apache работает в системе Windows, не знаю, имеет ли это значение.
Моя проблема следующая:
У меня есть 2 диска J: и K :, у обоих есть тест каталога (J: / тест / и К: / тест /)
J: / тест / содержит файл pink.html
К: / тест / содержит файлы red.html и blue.html
Я хочу получить доступ ко всем файлам в J: / тест / и К: / тест / с тем же URL:
Это отрывок из моего файла httpd.conf:
Alias /test/ "J:/test/"
Alias /test2/ "K:/test/"
<Directory "J:/test/">
Order allow,deny
Allow from all
Options All MultiViews
AllowOverride None
RewriteEngine on
RewriteCond /test/%(REQUEST_FILENAME) !-f #if we can't find the file in /test/
RewriteRule ^(.+) /test2/$1 [L] #rewrite url into /test2/something.html
RewriteCond /test/%(REQUEST_FILENAME) -f #if we find the file in /test/
RewriteRule ^(.+) /test/$1 #should this even be necessary ?
</Directory>
Это работает только частично, я могу получить доступ к red.html и blue.html на диске K :, но не к pink.html на диске J :. Кажется, полностью игнорирует второй RewriteCond-RewriteRule
пара. Как настроить httpd.conf для доступа к pink.html?
Я пробовал несколько подходов, но без толку :-( Надеюсь, мой вопрос ясен и кто-то может пролить свет на этот вопрос.
Заранее спасибо! / Алекс
Попробуй это,
RewriteRule ^(.+) /test/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test/(.+) /test2/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test2/(.+) /test3/$1
...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/test1E+10/(.+) http://www.google.com/search?q=where-is-$1 [L]
Вам не понадобится вторая комбинация RewriteCond / Rule, поскольку в основном вы пытаетесь сказать Apache, чтобы он делал то же самое, что и в любом случае. По сути, действие по умолчанию, если файл найден там, где он был запрошен (/test/pink.html), - это передать его клиенту.
Я бы переместил эти Rewrite * за пределы вашей конструкции Directory; этот контейнер чаще используется для ограничения доступа, вы делаете логическое перенаправление. После удаления Rewrite * и избавления от второй строфы отредактируйте RewriteCond, чтобы использовать символы {}, а не (), поскольку это правильный способ.
Если после всего этого он все еще не работает, добавьте эти две строки:
RewriteLog "c:/rwlog.txt"
RewriteLogLevel 7
... перезапустите Apache, протестируйте и прочтите файл журнала, чтобы выяснить, что не нравится следующему Apache.
В Linux вы можете сделать это на уровне файловой системы, так как есть несколько файловых систем, которые поддерживают объединение других файловых систем таким образом (даже в режиме чтения + записи), но я не думаю, что в Windows есть способ сделать это.
Другой вариант, опять же на уровне ОС, а не Apache, может заключаться в объединении всех файлов в одно место в виде символических ссылок. Это возможно под Windows, если вы используете файловые системы NTFS с помощью таких утилит. это от SysInternals.