0

我需要捕获具有可以编码的任何字符的 URL。例如 +、{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 中编码的字符,但它不捕获 URL,例如 - http://mydomain.com/vertical%5B1%5D.jpg

谢谢你的时间。

4

1 回答 1

1

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

例如:

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

当然,还有更多符合条件的角色……这只是一个例子

于 2012-11-21T16:19:24.320 回答