【问题标题】:Htaccess replace %20 with hyphen + redirect to new urlHtaccess 用连字符替换 %20 + 重定向到新的 url
【发布时间】:2014-05-30 18:24:52
【问题描述】:

我有以下 htaccess 文件:

Options -MultiViews

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^archive/([^/]+)$ news?title=$1
RewriteRule ^cars/([^/]+)$ carbrands?brand=$1

问题是一些汽车品牌包含两个词,所以它给出了以下结果:

example.com/cars/alfa%20romeo

如何更改我的代码以便人们被重定向到:

example.com/cars/alfa-romeo

我可能必须添加 [R=301,L] 才能重定向到新的 url,但是如何判断正确的 url 应该包含连字符而不是“%20”?

【问题讨论】:

  • RewriteRule ^cars/(\S+)\s+(\S+)$ cars/$1-$2 [R=301,L]

标签: .htaccess redirect space rule hyphen


【解决方案1】:

RewriteEngine On 正下方添加以下代码可将所有空格替换为连字符。

RewriteCond %{THE_REQUEST} (\s|%20)
RewriteRule ^([^\s%20]+)(?:\s|%20)+([^\s%20]+)((?:\s|%20)+.*)$ $1-$2$3 [N,DPI]
RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /$1-$2 [L,R=301,DPI]

【讨论】:

  • %{THE_REQUEST} 始终包含空格。而这个[^\s%20]+ 是错误的。
【解决方案2】:

在“RewriteEngine On”下面添加这个

RewriteRule ^cars/(.*)(?:\ )(.*)$ /cars/$1-$2 [L,E=DASH:Y]
RewriteCond %{ENV:DASH} Y
RewriteRule ^([^\ ]+)$ /$1 [L,R=301]

【讨论】:

  • 我在RewriteEngine On 正下方添加了您的代码,但仍然找不到example.com/cars/alfa-romeo。它甚至找不到example.com/cars/alfa%20romeo...
  • 我找到了答案。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2020-05-03
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
相关资源
最近更新 更多