【问题标题】:Remove %2F from URLs with mod_rewrite使用 mod_rewrite 从 URL 中删除 %2F
【发布时间】:2012-10-22 16:29:27
【问题描述】:

我想从我动态创建的 URL 中删除“%252F”。 我有一个 php 文件,它使用 %2F 而不是 / 创建链接。 然后链接在 URL 栏中表示为 %252F 而不是 /,这会导致一些问题。
我试图通过 .htaccess 文件实现的目标是将所有 %2F 重定向到 / 或将所有 %252F 重命名为 /,因为我无法更改创建链接的 php 代码。

这是我的 .htaccess

RewriteEngine on
Options +SymlinksIfOwnerMatch
RewriteBase /

RewriteCond %{HTTP_HOST} subdomain.mydomain.com
RewriteCond %{REQUEST_URI} (.*)/style.css [OR]
RewriteCond %{REQUEST_URI} (.*)/script.js [OR]
RewriteCond %{REQUEST_URI} (.*)/logo.png
RewriteRule (.*) http://www.mydomain.com%{REQUEST_URI} [R=301,NC,L]

RewriteCond %{REQUEST_METHOD}  !=POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/
RewriteRule ^(([^/]+/)*)index\.php$ http://subdomain.mydomain.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} \ /([^\ \?]*)([^\ \?]*)%2f(\?.*)?\  [NC]
RewriteRule !^/ /%1/%2 [QSA]

RewriteRule ^(/.+)%2f(.*)$ $1/$2 [NC,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?dir=([^\s]+) [NC]
RewriteRule ^ %1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?dir=/$1 [L]

我无法让它工作,也许其他人可以帮助我。 非常感谢!

【问题讨论】:

  • 为什么不修复损坏的 PHP 脚本呢?

标签: .htaccess mod-rewrite clean-urls


【解决方案1】:

线条:

RewriteCond %{THE_REQUEST} \ /([^\ \?]*)([^\ \?]*)%2f(\?.*)?\  [NC]
RewriteRule !^/ /%1/%2 [QSA]

RewriteRule ^(/.+)%2f(.*)$ $1/$2 [NC,QSA]

需要删除前导斜线。通过 htaccess 文件中的规则发送的 URI 去除了前导斜杠:

RewriteCond %{THE_REQUEST} \ /([^\ \?]*)([^\ \?]*)%2f(\?.*)?\  [NC]
RewriteRule ^ /%1/%2 [QSA]

RewriteRule ^(.+)%2f(.*)$ $1/$2 [NC,QSA,L]

不确定RewriteRule !^/ /%1/%2 [QSA] 行应该做什么,看起来你正在删除尾部斜杠?

【讨论】:

  • 我在这里找到了您所指的规则:link 但这些规则似乎都没有改变任何东西。以下规则让我摆脱了第一个 %252F:RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?dir=%2F([^\s]+) [NC] RewriteRule ^ %1? [R=301,L]
【解决方案2】:

我设法摆脱了 URL 中的第一个 %252F 和“堆叠”斜线的问题:

RewriteCond %{REQUEST_METHOD}  !=POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/
RewriteRule ^(([^/]+/)*)index\.php$ http://subdomain.mydomain.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?dir=%2F([^\s]+) [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?dir=([^\s]+) [NC]
RewriteRule ^ %1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?dir=/$1 [L]

不过,我的网址中仍然存在%252F 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2010-09-09
    • 1970-01-01
    • 2012-03-24
    • 2016-12-12
    • 2011-01-22
    • 2023-04-10
    相关资源
    最近更新 更多