我的重定向不删除最后一个斜杠?
问题描述:
我有一个网站,我不认为我的htaccess正在实施301重定向,我认为我的问题可能是在应用程序级别,但如果有人可以确认以下作品,我会很感激它,因为我期望它。我的重定向不删除最后一个斜杠?
示例重定向:http://www.siteic.com/a/b/c/
应该去http://www.siteic.com/a/b/c
- 但是下面不这样做。 通知删除尾部斜线。
Options +FollowSymLinks
RewriteEngine on
ErrorDocument 404/
RewriteCond %{HTTP_HOST} ^siteic\.com
RewriteRule ^(.*)$ http://www.siteic.com/$1 [R=permanent,L]
RewriteCond {REQUEST_URI} ^/first/$
RewriteRule ^(.*)$ http://www.siteic.com [R=permanent,L]
RewriteCond {REQUEST_URI} ^/first$
RewriteRule ^(.*)$ http://www.siteic.com [R=permanent,L]
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$ otherst.php?page=$1
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$ otherst.php?page=$1&page2=$2
答
我会怀疑你第一个规则是永远是真的,因此后续的规则永远不会被使用。
您应该使用来代替:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.your_domain.com$
RewriteRule ^(.*)$ http://www.your_domain.com/$1 [R=301]
你的第二个规则使确保所有URI以字符串“/首/”重定向到主页。 你的第三条规则与字符串'/ first'完全一样,所以实际上你可以删除你的第二条规则,或者你的第三条规则取决于你想要的行为。
你的第四条规则永远不会匹配,因为具有“first /”的uri将被重定向到主页。 你的第五规则应该比你的第四个规则之前,因为第4条规则将更加频繁真的比规则5.
至于你的要求:如何删除结尾的斜线,我这样做: - 首先确保路径指向一个不存在的目录 - 如果为true,去掉斜线
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
所以在最后我会做到这一点:
RewriteEngine on
# force WWW in the url
RewriteCond %{HTTP_HOST} !^www.siteic.com$
RewriteRule ^(.*)$ http://www.siteic.com/$1 [R=301]
# remove trailing slash if the url points to a non-existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
# redirects all url with /first to otherst.php
## with 2 GET vars
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$
otherst.php?page=$1&page2=$2
## with 1 GET var
RewriteRule ^first/([a-z,\_%,A-Z,\_%-,0-9,\-]*)$ otherst.php?page=$1
坦白地说,没有规则,会匹配'/ A/b/C /'。 – Gumbo 2009-12-12 22:29:15