Apache:重定向问题

时间:2011-07-27 20:03:17

标签: apache mod-rewrite url-rewriting

我有下一个规则,我应该可以毫无问题地访问这些网址:

domain.com/robots.txt - 应该将我重定向到 - > domain.com/sitemapHT/robots.txt 现在robots.txt有一个xmls文件索引,该站点不同部分的站点地图在哪里写入其站点地图。例如:domain.com/sitemapHT/sitemap_anuciantes.xml

使用当前规则(如下)当我尝试访问任何/robots.txt或sitemapHT网址时,它会将我发送到domain.com /

规则还会从我们拥有的旧/portal/index.action网址重定向到新的/

您能否帮我修改规则以正确访问以前的网址?

  <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 个答案:

答案 0 :(得分:1)

这两行一起没有多大意义:

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,如果这个不起作用,那就更好了。


<强>更新

1。不需要这一行:RewriteCond $1 !^/(sitemapHT/|portal/),尤其是在重写规则之后

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]