Да, вы можете сделать что-то подобное, но не совсем так, как вы это делаете.Вам просто нужно использовать правильные переменные сервера.
RewriteCond ^%1%2%3%4-%{REQUEST_FILENAME} -d
Проблема этой директивы заключается в том, что REQUEST_FILENAME
- это абсолютный путь к файловой системе.Таким образом, это эффективно проверяет, является ли ^2030113111-/home/user/public_html/foldername
допустимым каталогом - который потерпит неудачу.TestString
также является строкой , а не регулярным выражением, поэтому префикс ^
также может сломать вещи.
Вместо этого вы можете сделать что-то вроде:
RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 -d
RewriteRule (.+) - [L]
Где $1
- это URL-путь, соответствующий шаблону RewriteRule
.Шаблон RewriteRule
обрабатывается в первую очередь, перед директивами RewriteCond
, которые предшествуют ему.
Чтобы проверить, какой каталог мы проверяем, вы можете присвоить его переменной средыи проверьте это в вашем сценарии.Итак, для тестирования:
RewriteCond %{REMOTE_ADDR} ^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$
RewriteCond %{DOCUMENT_ROOT}/%1%2%3%4-$1 (.*)
RewriteRule (.+) - [E=DIRECTORY_CHECKING_FOR:%1,L]
Проверка переменной среды DIRECTING_CHECKING_FOR
в вашем скрипте должна показать что-то вроде: /home/user/public_html/2030113111-foldername
, в зависимости от структуры вашей файловой системы.
Обратите внимание, что %1
совпадает с последней совпавшей группой в предшествующей CondPattern (не обязательно той, что непосредственно выше, если нет соответствующих групп).Итак, %1
в подстановке RewriteRule
соответствует (.*)
(полное «имя каталога», которое мы проверяем).Принимая во внимание, что %1
в RewriteCond
TestString соответствует первому октету IP-адреса.