Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess-需要替换“&引用;在URL中加上“&&引用;_Apache_.htaccess_Mod Rewrite_Paypal - Fatal编程技术网

Apache .htaccess-需要替换“&引用;在URL中加上“&&引用;

Apache .htaccess-需要替换“&引用;在URL中加上“&&引用;,apache,.htaccess,mod-rewrite,paypal,Apache,.htaccess,Mod Rewrite,Paypal,所以,很遗憾,我有一个无法修改的url,paypal checkout会在该令牌后附加“?token=…”。问题是代理url已经包含多个参数,因此paypal令牌必须附加“&token=……”,否则“token”作为查询字符串变量不可见 唯一可行的方法是将.htaccess文件中的“?”替换为“&”。(除非有人有更好的主意!) 包含贝宝令牌的URL: https://some.samplesite.com/proxy/091F126B7B6D624623606A1BB67EDC430885ABA

所以,很遗憾,我有一个无法修改的url,paypal checkout会在该令牌后附加“?token=…”。问题是代理url已经包含多个参数,因此paypal令牌必须附加“&token=……”,否则“token”作为查询字符串变量不可见

唯一可行的方法是将.htaccess文件中的“?”替换为“&”。(除非有人有更好的主意!)

包含贝宝令牌的URL:
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实际上是path的一部分,但是b/c使用“&”附加它,它被转换为查询字符串param

htaccess日志

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]

尝试在
#之前添加此项,如果仅/存在,则需要停止循环(domain.com/)
注释:

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

RewriteEngine on
RewriteBase /

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

# convert ?token=... to &token=...
RewriteCond %{THE_REQUEST} \s/+(.+?)\?(token=[^&\s]+\S*)\s [NC]
RewriteRule ^ /%1&%2? [L,NE,R=302]

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

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

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

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

更新:

使用URL对此进行测试时:

http://abc.dev.localhost/proxy/foobar/&trans=success?token=EC-8FJ83689WF858702D
它重定向到:

http://abc.dev.localhost/proxy/foobar/&trans=success&token=EC-8FJ83689WF858702D
并为
打印($\u GET)
输出显示此信息:

Array
(
    [path] => proxy/foobar/
    [trans] => success
    [token] => EC-8FJ83689WF858702D
    [sub] => abc
)

没有发生任何情况,令牌参数在查询字符串中仍然不可用。请尝试添加您自己的虚拟查询字符串,例如
http://mydomain/return_url/?foo=bar
并查看Paypal是否正确添加了他们的令牌
&令牌=…
。它适用于
return\u url
-我只是不确定您称之为“checkout”的内容。我提到的查询字符串是从Paypal返回的。“returnURL”是相同的,只是没有“?标记”。同样在他们的文档中,他们在这种情况下会这样说,然后尝试一下,因为在大多数情况下,商家通常会附加他们自己的“会话”//自定义值-例如
http://domain/?sessionid=....
和Paypal正确地将令牌附加到它
http://domain/?sessionid=123&token=456
。这样的话,你就不必乱搞全球的东西了……嗯。也许我不是很清楚……:)Paypal没有正确地添加它,因此我必须找到读取令牌的方法。(除非我做了一些我认为我没有做的错事)使用“伪查询字符串”?换句话说,发送您的返回url时已包含一些查询字符串….
/?foo=bar
现在我在日志中发现此错误:[2015-07-14 13:29:05.367][1.114](警告)[/proxy/091F126B7B6D62462366A1BB67EDC430885ABAF02AD5975FF2A8276E21FD080911B7B6D6246A6AB67EDC430151C3DF14A66603F9389B45EC89C9057C76A20EA0B4746BA97D7027E9EBC6437DCCA31B42521A4794F8E766AB37C06B6B4FC920351E7C5FADB37CF0F82210BF29A74/&trans=成功]指定的路径、文件名或两者都太长。完全限定的文件名必须少于260个字符,目录名必须少于248个字符。请查看我的更新问题。上面的日志条目实际上只是一个警告。但您提供的代码试图转到“代理”目录…这是不应该发生的。错误的原因是b/c您通过添加[L,QSA]修改了此行“RewriteRule^(.*$/$1?sub=%1[QSA]”。请注意,文件中的最后一条规则必须运行。请查看上面的htaccess日志文件。最后一行应该写为/index.php?path=/proxy/(…)是的,这是正确的。原始URL中没有任何“?”。