mod_rewrite .htaccess中的HTTP_HOST和REQUEST_URI的编码和斜杠替换

时间:2014-09-04 04:24:10

标签: php apache .htaccess mod-rewrite redirect

我已创建.htaccess这样的文件,在这里我正在搜索DB字符串,如果uri包含DB字符串,则将完整uri写入变量url和重定向,到目前为止我试过这个..我不太了解mod_rewrite和htaccess。

Options +FollowSymlinks
RewriteEngine on

# If URI contains string DB then encode http_host and request uri and 
# send to http://host.domain.org/site2/index.php with new variable url=encodedstring

RewriteCond %{REQUEST_URI} /DB/
RewriteRule ^ http://host.domain.org/site2/index.php?url=%{HTTP_HOST}%{REQUEST_URI} [NE]

假设我的网址是

  http://host.domain.org/site2/DB/process.php?name=x&y=10

我想将url变量设为此

 $ echo 'http://host.domain.org/site2/DB/process.php?name=x&y=10' | base64 
 aHR0cDovL2hvc3QuZG9tYWluLm9yZy9zaXRlMi9EQi9wcm9jZXNzLnBocD9uYW1lPXgmeT0xMAo=

我想网址应该是这样的

 http://host.domain.org/site2/index.php?url=aHR0cDovL2hvc3QuZG9tYWluLm9yZy9zaXRlMi9EQi9wcm9jZXNzLnBocD9uYW1lPXgmeT0xMAo=

我不知道这是否可能.htaccess,有人帮助我

我甚至试图在最后

中将所有斜线替换为这样的
slash.sh
#!/usr/bin/env bash
sed -u 's/\//-/g'

.htaccess文件

RewriteCond %{REQUEST_URI} /DB/
RewriteMap slash prg:/var/www/virtual/slash.sh
http://host.domain.org/site2/index.php?url="${slash:%{HTTP_HOST}}${slash:%{REQUEST_URI}}" [L]

假设我的网址是

  http://host.domain.org/site2/DB/process.php?name=x&y=10

我想网址应该是这样的

 http://host.domain.org/site2/index.php?url="http:--host.domain.org-site2-DB-process.php?name=x&y=10"

我收到错误500内部服务器错误

所以最后base64和slash替换都没有为我工作..我的运气不好

感谢。

1 个答案:

答案 0 :(得分:1)

这些规则很棘手,但由于你的要求是这样的,我在这里为你提供答案。

请在DocumentRoot/.htaccess

中注明
RewriteEngine On

RewriteRule ^site2/DB/process\.php$ /site2/index.php/http://%{HTTP_HOST}%{REQUEST_URI} [NC,NE,L]

RewriteCond %{REQUEST_URI} ^(/site2/index.php)/([^/]*)/([^/]*/.*)$
RewriteRule ^ %1/%2-%3 [L,NE]

RewriteCond %{REQUEST_URI} ^(/site2/index.php)/([^/]*)/([^/]*)$ 
RewriteRule ^ %1?url=%2-%3 [L,NE,QSA,R=302]

这将重定向这样的URI:/site2/DB/process.php?name=x&y=10

/site2/index.php?url=http:--www.localhost-site2-DB-process.php&name=x&y=10

因此,在-查询参数中将所有连字符替换为url