【问题标题】:Removing whitespaces or %20 in url using htaccess使用 htaccess 删除 url 中的空格或 %20
【发布时间】:2015-03-04 08:05:23
【问题描述】:

大家好,你们能帮我吗,我在这里遇到了一点麻烦,我正在尝试使用 htaccess 删除我 url 中的所有 20% 并用连字符替换它我设法摆脱了 Acer 这两个词之间的另外 20%,液体,S1,S510

这是我的网址/localhost/gadgets/product/Acer-Liquid-S1-S510%20Mobile

如您所见,最后一部分有一个 %20,我该如何删除它

这是我的 htaccess

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /gadgets/

Options -Indexes

RewriteRule ^brand/([a-zA-Z]+)$ brand.php?id=$1

RewriteRule ^product/([A-Za-z0-9-]+)/?$   product.php?product_name=$1-$2 [NC,L]

RewriteRule ^(.*/|)[\s%20]+(.+)$ $1$2 [L]

RewriteRule ^(.+?)[\s%20]+(/.*|)$ $1$2 [L]

RewriteRule ^([^\s%20]*)(?:\s|%20)+(.*)$ $1-$2 [L,R]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f

RewriteRule ^(.*)$ $1.php

先谢谢各位了

【问题讨论】:

  • 不需要htaccess。可以通过url编码完成。
  • @Sunil 我不习惯使用 url 编码我只是习惯使用 htaccess

标签: php .htaccess mod-rewrite


【解决方案1】:

试试这个:

Options +FollowSymLinks -MultiViews -Indexes

RewriteEngine On
RewriteBase /gadgets/

RewriteRule ^([^\s%20]*)(?:\s|%20)+(.*)$ $1-$2 [N,E=Redirect:1]

RewriteCond {ENV:Redirect} ^1$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R,L]

RewriteRule ^brand/([a-zA-Z]+)$ brand.php?id=$1 [NC,L]
RewriteRule ^product/([A-Za-z0-9-]+)/?$ product.php?product_name=$1 [NC,L]

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

第一条规则删除循环中的所有空格(使用[N]),因此我们现在不必指定多个RewriteRules 一个一个地执行此操作。

下一条规则(带有{ENV:Redirect} 条件)是可选的,用于反映客户端浏览器上连字符的使用,以便创建的任何书签都链接到正确的非空白版本的 URL。

【讨论】:

  • 创建“循环”的有趣方法,+1。你知道这是否受LimitInternalRecursion设置的影响吗?
  • Ravi 你的建议只是给出了一个无限的“等待本地主机”
  • CBroe 不,它受 LimitInternalRecursion 影响我检查了 apache 中的错误日志,我现在不知道如何修复它
  • @magnum2236 可以将DPI 添加为[N,DPI,E=Redirect:1] 再试一次吗?
  • @Ravi Thapliyal 先生,我已经尝试过您的建议,即 [N,DPI,E=Redirect:1],结果我被扔回了我的主页而不是产品
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多