2011-07-15 75 views
2

我在我的网站上有两种链接:第一种是用.html结束,第二种是用/(用斜杠结束,在文件名未完成的情况下的.html)。RewriteRule of .htaccess,斜线在末尾

一些重写规则的原因,在文件不是.html的情况下,如果被添加/在最后,URL没有被正确地重写。

像:

这是确定与链接:http://mysite.com/cars/fast-cars

但不能与链接OK:http://mysite.com/cars/fast-cars/

所以,当URL与/,而不是用(.html/)完成我需要的是,在没有/的情况下,或在这种情况下:

http://mysite.com/cars/fast-cars/将被重定向到http://mysite.com/cars/fast-cars

希望我很清楚,并且您可以通过该htaccess规则来帮助我。先谢谢你。

更新:我在这里发现了部分解决方案:.htaccess with or without slash

但是,我的规则也不应该是有效的一些子目录(如目录管理员,订单等)。它也可以用相同的规则来定义吗?

更新2:我有这样的规则:

RewriteRule ^cars/fast-cars$ /seopage.php?marker=fast-cars$1 

此外,tryed与工作规则:

RewriteRule (.*)/$ $1 [L,R=301] 

但该规则必须绕过一些目录(即管理员,订单等)。

+0

请显示您现在的规则(包括您最近添加的规则)。最好有评论。 – LazyOne

+0

作为更新2添加... – user198003

+0

什么文件夹(名字少)?他们是真的吗?还是他们是“虚拟”的?/汽车/快车?添加这样的条件应该没有问题,我只是想为自己说清楚。 – LazyOne

回答

5

你可以通过几种方法来做到这一点(选择最适合你的方法)。

1)删除斜线/为不存在的文件和文件夹:

# remove trailing slash for non-existing files and folders 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ $1 [L,R=301] 

2)删除斜线/有例外

# remove trailing slash except some folders 
RewriteCond %{REQUEST_URI} !^/(admin|orders) 
RewriteRule ^(.*)/$ $1 [L,R=301] 

3)你甚至可以一起结合起来(这可能太多):

RewriteCond %{REQUEST_URI} !^/(admin|orders) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ $1 [L,R=301] 

另外,考虑在顶部的某处添加此指令 - documentation

DirectorySlash Off 
+0

我认为2会完成这项工作。它是否适用于上述目录的子目录? – user198003

+1

是的,条件说:除非/除了URL **开始**以'/ admin'或'/ orders'“,这也适用于'/ admin/dashboard /'等。 – LazyOne