.htaccess - 需要更换"?"在"&"

时间:2015-07-14 15:01:25

标签: apache .htaccess mod-rewrite paypal

所以,我有这个网址,遗憾的是无法修改,而paypal checkout会将标记添加到"?token = ....."。问题是代理URL已经包含几个参数,因此paypal令牌必须附加"& token = ....."否则"令牌"作为查询字符串var。

不可见

认为可行的唯一方法是更换"?"用"&"在.htaccess文件中。 (除非有人有更好的主意!)

包含PayPal令牌的网址
  https://some.samplesite.com/proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success?token=EC-8FJ83689WF858702D

我需要.htaccess规则可以解决问题。我还包括现有的.htaccess文件,以确保不会违反其他规则。

RewriteEngine on
RewriteBase /

# if not https, redirect
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# if only / is present, need to stop looping (domain.com/)
RewriteRule ^$ - [L]

# match subdomain
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^app
RewriteCond %{HTTP_HOST} ^([^\.]+)\.[^\.]+\.[^\.]+$
RewriteRule ^(.*)$ /$1?sub=%1 [QSA]

# ignore any .php|.html|.asp|.ico files and certain directories
RewriteRule ^(exec|images|css|js|xyz|(.*)\.php|(.*)\.html|(.*)\.asp|(.*)\.ico)($|/) - [L]

# stop if index.php
RewriteRule ^index\.php$ - [L]

# map all requests to 'path'
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [L]

感谢您的帮助!

编辑: 最终字符串将被分解为以下查询字符串参数

*path* - proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/

*sub* - some

*trans* - success

请注意 trans 实际上是路径的一部分,但是b / c是使用"&&#附加的34;,它被转换为查询字符串参数。

htaccess log

init rewrite engine with /proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
strip matching prefix: /proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success -> proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
applying pattern ^ to uri proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
RewriteCond: input='443' pattern='!^443$' => not-matched
strip matching prefix: /proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success -> proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
applying pattern ^ to uri proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
RewriteCond: input='GET /proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success HTTP/1.1' pattern='\s/+(.+?)\?(token=[^&\s]+\S*)\s' => not-matched
strip matching prefix: /proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success -> proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
applying pattern ^$ to uri proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
strip matching prefix: /proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success -> proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
applying pattern ^(.*)$ to uri proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success
RewriteCond: input='' pattern='^$' => matched
RewriteCond: input='demo.samplesite.com' pattern='!^app' => matched
RewriteCond: input='demo.samplesite.com' pattern='^([^\.]+)\.[^\.]+\.[^\.]+$' => matched
Rewrite URL to >> /proxy/091F126B7B6D624623606A1BB67EDC430885ABAF02AD5975FF2A8276E21FD083091F126B7B6D624623606A1BB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E67E9EBC6437DCCA31B42521A4794F8E766AB37A76C0E6BD4FC92C60351E7C5FADB37CF0F82210A04BF29A74/&trans=success?sub=demo&token=EC-76D265115N209873K [REWRITE]

2 个答案:

答案 0 :(得分:2)

这样做:

http://abc.dev.localhost/proxy/foobar/&trans=success?token=EC-8FJ83689WF858702D

<强>更新

使用网址测试时:

http://abc.dev.localhost/proxy/foobar/&trans=success&token=EC-8FJ83689WF858702D

重定向到:

print_r($_GET)

并为Array ( [path] => proxy/foobar/ [trans] => success [token] => EC-8FJ83689WF858702D [sub] => abc ) 输出显示此内容:

var Library={
    name:"Timmy",
    greet:function(name){
        console.log("Hello from the "+ name);
    }
}
module.exports.Library=Library;

答案 1 :(得分:1)

尝试在# if only / is present, need to stop looping (domain.com/)评论前添加此权限:

RewriteCond %{QUERY_STRING} ^(.*)\?token=(.*)$
RewriteRule ^(.*)$ /$1?%1&token=%2 [L,R,NE]