使用htaccess替换空格


replace space by - using htaccess

嗨,我在我的htaccess中有这段代码

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} 's/+single'.php'?title=([^'s&]+) [NC]
RewriteRule ^ /%1? [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ single.php?title=$1 [NE,L,QSA]
</IfModule>

和我在url中有空格,需要用破折号(-)替换它们

我怎么能做到;这是我要测试的页面之一

http://www.einfogarden.com/%D8%B1%D8%AC%D9%8A%D9%85%20%D8%A7%D9%84%D8%AA%D9%85%D8%B1%20%D9%88%D8%A7%D9%84%D8%AD%D9%84%D9%8A%D8%A8

你的规则是这样的:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} 's/+single'.php'?title=([^'s&]+) [NC]
RewriteRule ^ %1/? [R=302,L,NE]
## Adding a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} 's/+(.*?)[^/][?'s]
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]
# convert %20 to -
RewriteRule "^('S*) +('S* .*)$" $1-$2 [N,NE]
RewriteRule "^('S*) ('S*)$" $1-$2 [L,R=302,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ single.php?title=$1 [NE,L,QSA]
</IfModule>

您可以尝试将第一条规则替换为以下内容:

RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{THE_REQUEST} 's/+single'.php'?title=([^'s&]+) [NC]
RewriteRule ^ /%1? [L,NE]
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteCond %{THE_REQUEST} 's/+single'.php'?title=([^'s&]+) [NC]
RewriteRule ^(.*)(?:' |'+)(.*)$ /$1-$2 [L,NE]
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteCond %{THE_REQUEST} 's/+single'.php'?title=([^'s&]+) [NC]
RewriteCond %{REQUEST_URI} !(' |'+)
RewriteRule ^(.*)$ /$1 [R=301,L,NE]

因此,与其将直接请求重定向到"/title",不如先在内部将其重写为"/title"(第一条规则),然后迭代地将所有空格和"+"替换为"-"(第二条规则)。当URI中没有空格或"+"时,重定向(第三条规则)。

然后你需要编辑你的single.php,这样它就可以用破折号而不是空格来解释"title"。