Apache: проблемы с перенаправлениями - PullRequest
1 голос
/ 28 июля 2011

У меня есть следующие правила, и я должен иметь возможность доступа к этим URL-адресам без проблем:

domain.com/robots.txt - должен перенаправить меня на -> domain.com/sitemapHT/robots.txt, теперь robots.txt имеет индексФайлы xmls, где карты сайта для разных разделов сайта записывают свою карту сайта.Например: domain.com/sitemapHT/sitemap_anuciantes.xml

С текущими правилами (ниже). Когда я пытаюсь получить доступ к любому из /robots.txt или sitemapHT URL, он отправляет меня на domain.com/

Правила также перенаправляют со старого /portal/index.action URL, который у нас есть, на новый просто /

Не могли бы вы помочь мне исправить правила для правильного доступа к предыдущим URL-адресам?

  <VirtualHost *:80>
        ServerAdmin administracion.linux@yellargentina.com
        DocumentRoot "/opt/tomcat-5.5.30/webapps/portal"
        ServerName hoteles.t1.yellargentina.com
        ServerAlias hoteles.t1.yellargentina.com
        CustomLog /tmp/hoteles-access_log combined
        ErrorLog /tmp/hoteles-error_log
        RewriteLog /tmp/hoteles-rewrite_log
        RewriteLogLevel 3

        JkUnMount       /images/*.gif           w1
        JkUnMount       /images/*.png           w1
        JkUnMount       /images/*.jpg           w1
        JkUnMount       /js/*.js                w1
        JkUnMount       /styles/*.css           w1


        JkMount         /portal                 w1
        JkMount         /portal/*               w1


        RewriteEngine on

        RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
        RewriteRule .* - [F]
        Options +FollowSymlinks


        ##
        # Originales
        ##

        ##
        RewriteRule ^/robots.txt /sitemapHT/robots.txt [R=301]
        RewriteCond $1 !^/(sitemapHT/|portal/)
        ##

        #RewriteRule ^/$ /portal/ [R]
        #RewriteRule ^/(?!portal)(.*) /portal/ficha.action/$1 [PT]

        RewriteRule ^/$ /portal/index.action [PT]
        RewriteRule ^/portal/index.action / [R]
        RewriteRule ^/(?!portal)(.*) /portal/ficha.action/$1 [PT]
</VirtualHost>

Спасибо!


1 Ответ

1 голос
/ 28 июля 2011

Эти две строки вместе не имеют особого смысла:

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]
...