用htaccess删除尾部问号

有人可以帮我理解这段代码吗?

# Remove trailing ?
RewriteCond %{THE_REQUEST} ? HTTP [NC] 
RewriteRule .? /%{REQUEST_URI}? [R=301,L]

基本上我有一个www.example.com网站,它生成一个链接www.example.com/index.cfm? 我需要它重定向到www.example.com以实现SEO复制目的。 我设法删除了index.cfm,但是? 仍然呆在那里(www.example.com/?)。 如果它是最后一个字符,尾部斜线也会被删除。 我在网上发现了这个规则,但是我在apache中得到了一个“RewriteCond:bad flag delimiters”警告,并且它什么也没做。

我也有一些网页,例如www.example.com/index.cfm?term=test用于搜索,所以我只想摆脱尾随问号,而不是当我有附加查询时。

该错误在RewriteCond中。 我需要帮助了解这种情况,以及为什么它不适用于解决方案。

以防万一这是整个htaccess:

RewriteEngine On
Rewritebase /

# remove trailing index.cfm
RewriteRule ^index.cfm(?)?$ / [R=301,L]

# SEF URLs
SetEnv SEF_REQUEST false
RewriteRule ^[a-zd-]+/[a-z]d+/? /index.cfm/$0 [NC,PT,QSA,E=SEF_REQUEST:true]
RequestHeader add SEF-Request %{SEF_REQUEST}e
RewriteCond %{HTTP:SEF_REQUES} ^true$ [NC]
RewriteRule . - [L]

# Remove trailing ?
RewriteCond %{THE_REQUEST} ? HTTP [NC] 
RewriteRule .? ^%{REQUEST_URI}? [R=301,L]

注:我在发布之前在网上搜索/ stackoverflow并没有找到解决我的问题。

编辑:另外我注意到我的RewriteRule ^ index.cfm(?)?$ / [R = 301,L]正在删除index.cfm,即使它不是网址中的最后一个东西导致404当我尝试搜索有些东西(www.example.com/index.cfm?term=test)如果有人能纠正我,并说明这将是伟大的。 谢谢。

EDIT2:www.example.com/index.cfm?term=test&a=dh&j=dhjsi不应重定向。 www.example.com/a/b/d/f/h/w/d不应该被重定向。 www.example.com/index.cfm? www.example.com/index.cfm应重定向到www.example.com。


RewriteCond %{THE_REQUEST} ? HTTP [NC] 
RewriteRule .? ^%{REQUEST_URI}? [R=301,L]

不会工作,因为? 是正则表达式的保留字符,您需要将其与空间一起转义。 尝试:

RewriteCond %{THE_REQUEST} ? HTTP [NC] 
RewriteRule ^/?(index.cfm)? /? [R=301,L]

此外,您希望在# remove trailing index.cfm规则下使用此规则,而不是在底部。


1)案例1:删除问号

http://example.com/page/subpage/?YOURSTRING=blabla

重定向到

http://example.com/page/subpage/

然后在.htaccess的开始,插入:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} YOURSTRING=(.*)
RewriteRule ^(.*)$ /$1? [R=301,L]
</IfModule>

# if wordpres isnot installed in root folder, then edit the fourth line to this
# RewriteRule ^(.*)$ /YOUR-WORDPRESS-DIRECTORY/$1? [R=301,L]

2)案例2:从问号重定向到另一个链接

http://example.com/index.php?YOURSTRING=blabla&id=44

重定向到

http://example.com/page/subpage/

使用:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} YOURSTRING=blabla&id=44
RewriteRule ^(.*)$ http://example.com/page/subpage/? [R=301,L]
</IfModule>
链接地址: http://www.djcxy.com/p/6219.html

上一篇: Removing trailing question mark with htaccess

下一篇: IE9 window.location.href error