2011-11-07 62 views
0

我有以下代码:的.htaccess重写规则条件

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
RewriteRule^http://domain.com/ipad%{REQUEST_URI} [L,P] 

所以,我的子域,http://m.domain.com是真正从拉http://domain.com/ipad/

一切工作正常,如果我输入:http://m.domain.com/shop-name/它完美的作品。但是,当我省略斜线并输入http://m.domain.com/shop-name时,它将重定向到http://domain.com/ipad/shop-name/,这不应该发生,因此没有人应该看到ipad目录。

有谁知道我该如何解决这个问题?

谢谢!

+0

是“店铺名”的目录?你有权访问中央Apache配置文件(例如httpd.conf)或这些主机的'VirtualHost'部分吗? – JMM

+0

这只是另一个RewriteRule。真正的路径是index.php?shop_name =无论它重定向到/ shop-name/ – Drew

回答

1

这可能是因为mod_dir在内部处理请求。当你访问http://m.domain.com/shop-name然后它被重写为http://domain.com/ipad/shop-name时,mod_dir 302将浏览器重定向到http://domain.com/ipad/shop-name/

您可以尝试处理RewriteRule中的尾部斜线。可能是一个这样做的更清洁的方式,而是沿着线的东西:

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
# Has trailing slash in request, don't need to append one in the RewriteRule 
RewriteCond %{THE_REQUEST} ./\ HTTP/1\.[01]$ 
RewriteRule^http://domain.com/ipad%{REQUEST_URI} [L,P] 

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
# Missing trailing slash in request 
RewriteCond %{THE_REQUEST} [^/]\ HTTP/1\.[01]$ 
# Request doesn't end with one of these extensions, 301 redirect to include trailing slash 
RewriteCond %{REQUEST_FILENAME} !\.(php|html?|jpg|gif)$ 
RewriteRule . http://m.domain.com%{REQUEST_URI}/ [R=301] 

编辑:编辑解决301重定向缺少结尾的斜线

+0

嘿,非常感谢,它的工作!为了保持我的链接一致,我想强制一个斜线,所以如果他们在/店名的时间将重定向到/ shop-name /目前似乎没有这样做。我在我的htaccess文件中尝试了一些不同的片段来强制结尾的斜杠,但无法使其工作。我试过这个: #强制拖尾斜杠 RewriteCond%{REQUEST_FILENAME}!\。(php | html?| jpg | gif)$ RewriteRule^[^ /] + $%{REQUEST_URI}/[L,R = 301 ] – Drew

+0

请参阅第二次重写的编辑版本。当缺少斜线时,不要将它从* *斜线后移到domain.com *,301重定向浏览器以包含斜杠 –

+0

非常感谢。我感谢你的帮助,它工作的很棒:) – Drew