Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 删除和修复URL中空格的htaccess规则_Regex_.htaccess - Fatal编程技术网

Regex 删除和修复URL中空格的htaccess规则

Regex 删除和修复URL中空格的htaccess规则,regex,.htaccess,Regex,.htaccess,我的URL中有需要使用htaccess规则删除的空格 以下是一个示例URL: http://www.example.com/folder name/where/else/we-want-here/ http://www.example.com/my folder name/where/else/we-want-here/ 应设置为: http://www.example.com/foldername/where/else/we-want-here/ http://www.example.com

我的URL中有需要使用htaccess规则删除的空格

以下是一个示例URL:

http://www.example.com/folder name/where/else/we-want-here/
http://www.example.com/my folder name/where/else/we-want-here/
应设置为:

http://www.example.com/foldername/where/else/we-want-here/
http://www.example.com/myfoldername/where/else/we-want-here/
然后继续处理更多的规则

这是我一直在玩的规则,但它需要更一般,因为“文件夹名称”可以是“我的文件夹名称”或其他名称,其中包含1个或多个(或没有)空格

RewriteRule ^([a-z0-9-_]+)\ ([a-z0-9-_]+)/(.*)/? /$1$2/$3/ [NC]
任何帮助都将不胜感激-谢谢

丹尼斯


1) 它们是%20,但在URL栏中它们是空格。很抱歉这里的混乱

2) 这在一定程度上解决了这个问题-如果URL中有超过1个空间(%20),我就无法让它工作

3) 我想我已经半修复了。这项工作:

RewriteRule ^washington\sdc(.*) /washingtondc$1 [NC,R=301,L] 
我如何结合接受各种各样的东西来匹配前面的部分?我试过:

RewriteRule ^(washington\sdc|atlantic\scity)(.*) /$1$2 [NC,R=301,L] 
但这是行不通的。想法

谢谢大家的意见


Dennis

您不能用一条规则完成所有操作,但重写引擎会循环,因此您只能使用一条规则,但必须能够匹配额外的空格:

RewriteRule ^([a-z0-9-_]+)\ ([^/]+)/(.*)/? /$1$2/$3/ [L]

规则将循环并继续删除空格,直到不再有空格。

您可以像以前一样进行空格替换

RewriteRule ^(\S+)\s+(.+)$ $1$2 [L]
此模式查找前导的非空白
(\S+)
,然后查找一个或多个空白
\S+
以及其后的任何
(.+)


这个解决方案的问题是,它相当昂贵。这是因为它会循环直到删除所有空格,这可能需要通过重写引擎进行几轮操作。

文档\u ROOT/.htaccess
文件中尝试以下两条规则:

RewriteEngine On
RewriteBase /

RewriteRule "^(\S*) +(\S* .*)$" $1$2 [L]
RewriteRule "^(\S*) (\S*)$" /$1$2 [L,R=302]

有没有可能做一个替换:没有空间?这会更简单。是的,用零替换空间(移除空间)正是我所需要的。我可能会用破折号替换空格,因为我可以在它下面运行另一条规则来修复这个问题,但我宁愿跳过这一步。谢谢!您实际上有带空格的传入URI吗?这不应该发生。。。它们应该是+或%20。它们将在某个时刻转换为空间。如果这些是来自您站点的传出URI(
链接),您必须自己处理--.htaccess不会处理它们。是的,我们会处理。我们在我的网站上的某个地方出错,一些URL有空格。谷歌找到了它们,并在我的网站上加入了带有空格的旧URL。这很痛苦,我只想修复它们,这样我就不会再收到错误消息了。:)刚刚试过这个-都不管用。我希望它像替换一样简单(“,”)!!:)我仍在努力解决这个问题。不过有些事发生了。我甚至无法使用此规则:重写规则^new%20york%20city(.*)/newyorkcity$1[NC]它确实有效。经过适当的测试后我发布了它。您可能有一些冲突的规则。仍在尝试修复此规则。引用应该在那里吗?作为HTACCESS中的第一条规则尝试使用和不使用,但仍然不起作用。重写URL的格式为:/washington%20dc/events/11/dancing/I甚至对此进行了测试,但不起作用:RewriteRule^new%20york%20city(.*)/newyorkcity$1[NC]我想我已经半修复了这个问题。这是有效的:重写规则^washington\sdc(.*)/washingtondc$1[NC,R=301,L]我如何结合起来接受前面部分匹配的各种东西?我试过重写规则^(washington\sdc | atlantic\scity)(.*)/$1$2[NC,R=301,L],但它不起作用。思想?谢谢!很难从注释中读取代码。你能发布有问题的代码并重新表述你的问题以使其易于理解吗?好的,你能给我提供一个示例URL,这个代码不适用于它吗?
RewriteEngine On
RewriteBase /

RewriteRule "^(\S*) +(\S* .*)$" $1$2 [L]
RewriteRule "^(\S*) (\S*)$" /$1$2 [L,R=302]