htaccess仅使用连字符重定向将%20替换为文件名

时间:2016-02-23 12:38:22

标签: regex wordpress .htaccess redirect mod-rewrite

我需要在请求的网址的文件名中替换%20个空格。

我正在使用此正则表达式:^(.*)\s(.*)$替换Url中的所有空格。我无法使其仅适用于文件名。

http://example.com/subfolder/One More Sub Folder/Onother Sub Folder/File%20test%20example.jpg

我在wordpress下,我需要一个RewriteCondition和RewriteRule来实现这个目标:

http://example.com/wordpress/subfolder/One More Sub Folder/Onother Sub Folder/File-test-example.jpg

我也需要替换htm请求,但我也需要从文件名中删除html扩展名。

所以现在我有这些适用于html的规则:

RewriteCond %{THE_REQUEST} (\.htm|\.html)
RewriteRule ^(.*)(\.htm|\.html)$ http://www.example.com/wordpress/$1 [R=301,L]

这些用于重定向jpg:

RewriteCond %{REQUEST_URI} !^/wordpress/wp-content/uploads/
RewriteRule ^(.*\.jpg)$ /wordpress/wp-content/uploads/2016/02/$1 [R=301,L]

在htaccess文件的开头,我有wp slug工作所需的小写转换:

<IfModule mod_speling.c>
CheckSpelling on
</IfModule>

2 个答案:

答案 0 :(得分:0)

如果这些是现有文件,您可以使用以下规则将%20替换为 - :

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)\s(.*)$ /$1-$2 [NC,L,R]

该规则仅适用于现有文件。

答案 1 :(得分:0)

你试过RewriteRule ^(.*)(%20)(.*)$ /$1-$2 [R=301,NE,L]吗?