htaccess正则表达式 - 有没有办法捕获编码的网址?

时间:2012-11-21 16:09:49

标签: php regex apache .htaccess redirect

我需要捕获包含任何可编码字符的网址。例如+,{space},[,]等。我厌倦了做以下但没有工作 -

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*)(\s|\+|\%)+(.*)$
RewriteRule ^(.*)$ /content/my-rewrite-redirect.php [L]
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://mydomain.com/content/$1$1 [QSA,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://mydomain.com/content/$1 [QSA,L]

(\ s | + | \%) - 尝试此操作来捕获空格字符以及已在URL中编码的任何字符,但它不会捕获诸如 - http://mydomain.com/vertical%5B1%5D.jpg

之类的网址

Thansk你的时间。

1 个答案:

答案 0 :(得分:1)

您遇到的问题很可能是在获得htaccess之前,Apache会对URL进行解码。您应该尝试而不是搜索编码字符,以创建一个正则表达式,搜索任何将被URL编码的字符。

e.g:

RewriteCond %{REQUEST_FILENAME} [!@#$%^&*`~\(\)\\/\[\]\{\}\+]+

当然,还会有更多的角色符合资格......这只是一个例子

相关问题