我的重定向没有删除最终斜杠吗?

时间:2009-12-12 19:33:49

标签: .htaccess mod-rewrite

我有一个网站,我认为我的htaccess没有正确实施301重定向,我认为我的问题可能在应用程序级别,但如果有人能够按照我的预期确认以下工作,我将不胜感激。< / p>

重定向示例: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 

1 个答案:

答案 0 :(得分:1)

我怀疑你首先统治永远是真的,因此后来的规则永远不会被使用。

你应该使用它:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.your_domain.com$
RewriteRule ^(.*)$ http://www.your_domain.com/$1 [R=301]

你的第二条规则确保所有带字符串'/ first /'的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