我正在尝试使用 appcmd.exe 在 Windows 2016 上的 IIS 中配置站点。具体来说,是 PHP 和 FastCGI。我遇到了一个问题,即使用单引号指定参数参数失败。我似乎无法弄清楚如何转义此问题或需要使用什么引号。以下是有效的命令:
%windir%\system32\inetsrv\appcmd.exe set config /section:system.webServer/fastCGI /+"[fullPath='c:\php\php-cgi.exe', arguments='-d open_basedir=E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com', maxInstances='0', instanceMaxRequests='10000']" /commit:apphost
在 Windows 上使用 open_basedir 我需要
-d open_basedir=E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com
用单引号括起来。像这样:
-d open_basedir='E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com'
如果我首先创建没有参数的 FastCGI 应用程序,那么我可以随后像这样添加它们:
%windir%\system32\inetsrv\appcmd.exe set config /section:system.webServer/fastCGI /[fullPath='c:\php\php-cgi.exe'].arguments:"-d open_basedir='E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com'" /commit:apphost
这个问题是我无法随后更改其他设置,因为我无法使用 appcmd 指定单引号路径。
我可以使用 IIS 管理器 GUI 和 C# 代码来实现这一点。因此,绝对可以这样设置。我似乎无法获得 appcmd 的正确格式。
答案1
使用两个单引号来表示字符串中的单引号,例如
C:\Windows\System32\inetsrv\appcmd.exe set config -section:system.webserver/httpProtocol /+"customHeaders.[name='Content-Security-Policy',value='default-src ''self'';']"
答案2
我在尝试寻找相同答案时遇到了您的问题。我发现了一种解决方法,想告诉您。
使用 appcmd.exe 的 XML i/o 功能。在具有正确标头的网站上,运行 appcmd list config /section:httpProtocol /xml > addheaders.xml 并保存输出文件。在另一个系统上,您可以运行 appcmd set config /in < addheaders.xml
我相信如果您不想依赖额外的文件,您可以找到一种方法将 xml 包含在脚本中。