mod_rewrite - проверить наличие файлов и каталогов

0

У меня есть 2 доменных имени, foo.com и bar.com и файл .htaccess в корневой bar.com запрашивают все запросы на bar.com для перенаправления на foo.com кроме начального поиска файла индекса каталога, который получает указал на определенный файл php (functions.php) на foo.com.

Это означает, что запрос на bar.com или www.bar.com будет видеть foo.com/functions.php доступ и различные запросы на изображения, таблицы стилей и т.д. продолжают обращаться переписанный относительный путь foo.com/images/image.jpg а не foo.com/function.phpimages/image.jpg. Все это прекрасно работает.

Теперь проблема.

Я хочу включить подкаталог на bar.com, который не перенаправляется. Как и в случае, запрос на bar.com/newdirectory/ отправляется в этот каталог, и все относительные запросы на файлы ведут себя как обычно, сохраняя исходное правило (описанное выше) для всех, кто обращается к bar.com в корне. В настоящее время я получаю 404, если попытаюсь получить доступ к новому подкаталогу.

В моем исходном файле .htaccess я включил свободный код для проверки того, что файлы не существуют. Я попытался добавить флаг !-d чтобы проверить, не существуют ли вначале каталоги, но это привело к тому, что запросы на bar.com переходили прямо к foo.com а не к foo.com/functions.php

Текущий файл .htaccess :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Check the request isn't an existing file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^$ http://www.foo.com/functions.php [P]
RewriteCond %{REQUEST_FILENAME} !^$ [NC]
RewriteRule ^(.*) http://www.foo.com/$1 [P]
Теги:
.htaccess
redirect
mod-rewrite

1 ответ

2
Лучший ответ

Вы можете добавить после RewriteBase/:

RewriteRule ^newdirectory/? - [L]

И для других. Нет необходимости проверять файл, потому что вы перенаправляете только пустой URI.
Вы можете использовать:

RewriteRule ^$ http://www.foo.com/functions.php [P]
RewriteRule ^(.+) http://www.foo.com/$1 [P]

Что дает для всех .htaccess :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^newdirectory/? - [L]

RewriteRule ^$ http://www.foo.com/functions.php [P]
RewriteRule ^(.+) http://www.foo.com/$1 [P]
  • 0
    Это похоже на работу, спасибо, Круизс. Интересно, найдется ли решение, которое будет работать для защиты будущих подкаталогов? Я могу вручную добавить исключения, как это, на данный момент.
  • 2
    Вы можете проверить с помощью RewriteRule ^(newdirectory|otherdirectory|other|other)/? - [L]
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню