用 - 替换空间 - 使用htaccess

时间:2014-08-13 05:42:34

标签: php .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>

我在网址中有空格,需要用短划线( - )

替换它们

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

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

2 个答案:

答案 0 :(得分:1)

你的规则如下:

<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>

答案 1 :(得分:1)

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

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,以便用破折号代替空格来解释“标题”。