Эти две строки вместе не имеют особого смысла:
RewriteCond $1 !^/(sitemapHT/|portal/)
RewriteRule ^/robots.txt /sitemapHT/robots.txt [R=301]
Эта единственная строка выполнит работу по переписыванию (если вы хотите перенаправить, добавьте R=301,
рядом с L
) domain.com/robots.txt
в domain.com/sitemapHT/robots.txt
:
RewriteRule ^robots\.txt$ /sitemapHT/robots.txt [L]
P.S. Переписываемый журнал (последний блок кода в теле вопроса) не читается. Пожалуйста, отформатируйте его правильно.
P.P.S. Если в вашем .htaccess есть другие правила, они могут повлиять на это правило перезаписи. Лучше, если вы предоставите весь .htaccess, если этот не будет работать.
UPDATE:
1. Нет необходимости в этой строке: RewriteCond $1 !^/(sitemapHT/|portal/)
, особенно если она после правила перезаписи.
2. Что делают эти 2 строки?
RewriteRule ^/$ /portal/index.action [PT]
RewriteRule ^/portal/index.action / [R]
Что касается меня - они делают противоположные работы. Но если это сработает, я не буду к нему прикасаться.
Попробуйте эти правила переписывания:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F,L]
RewriteRule ^/robots.txt /sitemapHT/robots.txt [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/portal/index.action\sHTTP/.+
RewriteRule ^/portal/index.action$ / [R,L]
RewriteRule ^/$ /portal/index.action [PT,L]
RewriteRule ^/(?!portal|sitemapHT)(.*) /portal/ficha.action/$1 [PT,L]