【问题标题】:Removing duplicate slashes in URL via .htaccess or PHP通过 .htaccess 或 PHP 删除 URL 中的重复斜杠
【发布时间】:2013-04-14 09:51:04
【问题描述】:

我正在尝试从 URL 中删除重复的斜杠。以下 .htaccess 规则:

RewriteRule ^(.+)//+(.*)$ $1/$2 [L,NC,R=301] 

不要在如下 URL 上为我工作:

http://www.mp7.org/?site=69.com\\\\\\\\\\\\\\\\

.htaccess 文件

#### mod_rewrite in use
Options +FollowSymlinks
RewriteEngine On

【问题讨论】:

  • 为什么删除双斜杠的正则表达式会删除双反斜杠?
  • 斜杠和反斜杠不同

标签: php .htaccess url mod-rewrite duplicates


【解决方案1】:

此规则不适用于反斜杠。您必须使用反斜杠添加类似的规则

RewriteRule ^(.+)\\\\+(.*)$ $1\\$2 [L,R]

如果您想用(正向)斜杠替换反斜杠,请改用此规则

RewriteRule ^(.+)\\\\+(.*)$ $1/$2 [L,R]

并删除请求末尾的所有反斜杠

RewriteRule ^(.*?)[/\\]+$ $1 [L,R]

和查询字符串一样

RewriteCond %{QUERY_STRING} ^(.*=.*?)[/\\]+$
RewriteRule ^.*$ $0?%1 [R,L,QSA]

当一切正常时,您可以将R 更改为R=301

从不在启用 301 的情况下进行测试,请参阅此答案 Tips for debugging .htaccess rewrite rules 了解详情。

【讨论】:

  • RewriteRule ^(.+)\\\\+(.*)$ $1\$2 [L,R] ... 不要删除反斜杠
  • @user6509 是否要删除或替换反斜杠?我还忘记了一个额外的反斜杠。
  • 我想完全删除 URL 末尾的所有斜杠或反斜杠
  • RewriteRule ^(.*)[/\]+$ $1 [L,R] 不起作用。该 URL 仍可按原方式访问:mp7.org/?site=69.com\\\\\\\\\\\\\\\\\\
  • @user6509 没意识到,是查询字符串。
【解决方案2】:

这是因为 IIS 服务器,而且几乎可以肯定您的网站是在 .Net .asp 或 . aspx 您需要使用一个微型脚本,当您的服务器获得 http 或 https 请求时,它必须是 Lcase(URL)。如果页面不多,您可以全部重命名为小写,将网页的所有内部链接修改为小写,然后在谷歌网站管理员工具中上诉URL删除请求。

如何删除重复的网址

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-12
    • 2013-06-09
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2021-11-26
    • 2016-01-10
    • 2017-05-03
    相关资源
    最近更新 更多