从网址中删除/签名

时间:2018-11-05 14:39:42

标签: wordpress .htaccess

我花了2个小时在线尝试获取适用于此的htaccess,我想将所有example.com/?s=keyword/重定向到example.com/?s=keyword

我想使用.htaccess从网址中删除/符号,请寻求帮助

1 个答案:

答案 0 :(得分:1)

由于后缀斜杠出现在URL的查询字符串部分,因此您需要使用mod_rewrite并对照QUERY_STRING服务器变量进行检查。 RewriteRule(和RedirectRedirectMatch)伪指令仅与URL路径匹配。

(链接的问题处理URL路径上的尾部斜杠,而不是查询字符串-这是一个不同的问题。)

在您的.htaccess文件的最顶部,在任何现有的WordPress指令之前(即# BEGIN WordPress之前,)尝试以下操作:

RewriteCond %{QUERY_STRING} ^s=(\w+)/$
RewriteRule ^$ /?s=%1 [R,L]

(\w+)-匹配包含一个或多个“单词”字符(a-zA-Z0-9,{{ 1}})。 替换字符串中的_后向引用包含此关键字

如果WordPress区块中已经存在%1指令,则无需重复。

旁边:我确实想知道为什么为什么?由于这是RewriteEngine On URL参数的一部分,因此PHP代码可以(并且应该)已经解决了这个问题?


UPDATE#1:

  

您的代码有效,但是如果网址上有空格或s-符号,它将不会重定向

空格可以在查询字符串中编码为+%20。只要允许您简单地允许+即可,而不是将其限制为特定的URL编码字符,则可以将指令修改为:

%

需要使用RewriteCond %{QUERY_STRING} ^s=([\w%+-]+)/$ RewriteRule ^$ /?s=%1 [NE,R,L] 指令上的NEnoescape)标志,以防止Apache将RewriteRule(应在请求中出现)URL编码为{ {1}}(替代)。本质上是防止Apache对输出URL进行双重编码。我们假设,如果请求的URL上已经存在%,则它已经是有效的URL编码序列的一部分,例如。 %25(如果是空格)。

要允许任何内容,然后将%指令更改为:

%20

请注意,这假定该URL上只有一个URL参数(如您的示例所示)。

还请注意,这些当前是302(临时)重定向。如果这应该是永久的,则将RewriteCond更改为RewriteCond %{QUERY_STRING} ^s=(.+)/$ ,但只有在确认它可以正常工作后才能将其更改(以避免缓存问题)。


UPDATE#2:

  

如果我要将文件夹R重定向到R=301

,该怎么办?

如本例所示,要重定向特定的子目录(或路径段),然后将example.com/stack/?s=keyword/伪指令修改为:

example.com/stack/?s=keyword

如果您需要匹配根目录此子目录,请使用:

RewriteRule

要匹配 any 子目录根目录,请使用以下内容:

RewriteRule ^stack/$ /$0?s=%1 [NE,R,L]

请注意,在此示例中,子目录仅限于“单词”字符加RewriteRule ^(stack/)?$ /$1?s=%1 [NE,R,L] (连字符)。