2

我想从我动态创建的 URL 中删除“%252F”。我有一个 php 文件,它使用 a%2F而不是/. 然后链接在 URL-Bar 中表示,%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]

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

4

2 回答 2

0

这些行:

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]行应该做什么,看起来您正在剥离尾部斜杠?

于 2012-10-22T17:26:33.863 回答
0

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

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不过,我的网址仍然存在问题。

于 2012-10-23T09:44:29.490 回答