.htaccess 使用htaccess删除尾部问号

.htaccess 使用htaccess删除尾部问号,.htaccess,.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.co

有人能帮我理解这个代码吗

# 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,用于搜索,所以我只想去掉后面的问号,而不是当我有一个附加的查询时

错误正在重写中。我需要帮助了解这种情况以及为什么它不起作用,而不仅仅是它的答案

以防万一,这里是整个htaccess:

RewriteEngine On
Rewritebase /

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

# SEF URLs
SetEnv SEF_REQUEST false
RewriteRule ^[a-z\d\-]+/[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,即使这不是url中的最后一个内容,当我尝试搜索某个内容(www.example.com/index.cfm?term=test)时,如果有人能纠正我并解释这将非常好,也会导致404。谢谢你

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/
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]
重定向到

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


重新启动发动机
RewriteCond%{QUERY_STRING}YOURSTRING=blabla&id=44
重写规则^(.*)$http://example.com/page/subpage/? [R=301,L]

?何时应将传入URL映射到
index.cfm
index.cfm
是浏览器地址栏中显示的URL的一部分吗?
index.cfm
的查询是否也显示在浏览器的地址栏中?如果没有,那么应该映射到
index.cfm
的传入URL是如何映射的?很多疑问。请花点时间更新您的问题,为每个案例提供一些传入和映射的URL示例。否则,我想猜测你想要什么是不可能的,至少对我来说是这样。单凭规则并没有多大帮助。它们不起作用,是您提出问题的原因。已更新。这些是我能想到的唯一示例。现在我不再收到错误,而是在尝试转到www.example.com/?@bia.migueis时收到了一个www.example.com/%5e。您确定已删除规则目标中的错误
^
?那不应该在那里。你的问题中有,但我在回答中删除了。哦,天哪,我没看到那个变化。你的代码工作得很好:)非常感谢。您是否还知道只有在index.cfm是URL中的最后一个内容时才删除它?我一直在删除代码,即使它在中间。URL@bia.migueis尝试在其正上方添加一个
RewriteCond%{QUERY_STRING}^$
。@bia.migueis确保重定向规则位于顶部附近,位于任何类型的路由规则(SEF规则)之上,该规则不会删除尾部问号-它会删除整个查询字符串,所以根本不回答这个问题。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} YOURSTRING=blabla&id=44
RewriteRule ^(.*)$ http://example.com/page/subpage/? [R=301,L]
</IfModule>