Я пытаюсь использовать mod_rewrite для перенаправления запросов на 123.example.com/456/file.html
на example.com/123/456/file.html
. Переписать необходимо, потому что новые каталоги могут быть созданы на лету. Я пытался объяснить это, но, похоже, не могу прийти к рабочему решению.
Во-первых, если я воспользуюсь приведенными ниже правилами перезаписи, я получу 404 для всего , потому что оно успешно выполняет второе правило, выполняет внутреннее перенаправление, снова выполняет правила и первое правило совпадает, потому что оно выглядит за 123/123/456/file.html
, в результате чего 404.
RewriteCond %{HTTP_HOST} ^(\d+)\.
RewriteCond %{DOCUMENT_ROOT}/%1/$1 !-d
RewriteCond %{DOCUMENT_ROOT}/%1/$1 !-f
RewriteRule (.*) - [R=404,L]
RewriteCond %{HTTP_HOST} ^(\d+)\.
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f
RewriteRule (.*) /%1/$1 [L]
Если я переместу 404 на последнее место, я получу следующее:
RewriteCond %{HTTP_HOST} ^(\d+)\.
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f
RewriteRule (.*) /%1/$1 [L]
RewriteCond %{DOCUMENT_ROOT}/$1 !-d
RewriteCond %{DOCUMENT_ROOT}/$1 !-f
RewriteRule ^(.*)$ - [R=404,L]
Он почти работает так, как мне нужно, но не работает 404, когда вы вводите 123.example.com/123/
, хотя он должен быть недействительным. Поскольку путь не был переписан по первому правилу, $1
оценивается как 123/
вместо неверного пути 123/123/
, что делает запрос успешным без выполнения каких-либо правил перезаписи.
Мне кажется, я очень близок к тому, чтобы заставить это работать. Любая помощь приветствуется.