我正试图将所有到web服务器的请求发送到.cgi
脚本,而该脚本不显示在url中(cgi脚本正在运行Python-Flask(
例如,如果您转到以下url:https://example.com/page/page2
它将使用路径/page/page2
向main.cgi
发送请求,但/main.cgi
不会出现在url中。此外,我希望这样用户就可以而不是通过访问他们的url来访问任何静态文件
到目前为止,我已经尝试了以下.htaccess文件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /main.cgi/$1 [L]
遗憾的是,这允许用户通过访问他们的url来访问静态文件。例如,urlexample.com/static/image.jpg
将返回图像,而不是从cgi脚本返回的任何内容。
我也试过:
RewriteCond %{REQUEST_URI} !=/main.cgi
RewriteRule .*/main.cgi
但是,这会删除url路径。例如,这个url:example.com/hello
将被重定向到example.com
。
如何让htaccess在不出现在url中的情况下向cgi脚本发送请求?
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /main.cgi/$1 [L]
这会将所有未映射到真实文件(包括目录(的请求重写到/main.cgi
,并将请求的URL路径作为路径信息传递给脚本(CGI脚本可能期望这样做(。我想这在这方面是有效的吗?
要重写所有内容,则需要删除RewriteCond
指令(如稍后所做(,但您确实需要防止对/main.cgi
的内部请求被内部重写,否则会创建重写循环(500错误响应(。
例如:
RewriteRule !^main.cgi main.cgi%{REQUEST_URI} [L]
这将所有尚未针对/main.cgi
的请求重写为/main.cgi/<url>
。
RewriteRule
模式上的!
前缀运算符否定正则表达式-当正则表达式不匹配时,规则成功。在.htaccess
中使用时,RewriteRule
模式上没有斜杠前缀。此处不需要替换字符串上的斜杠前缀。REQUEST_URI
服务器变量包含根相对URL路径(包括斜杠前缀(,因此不需要使用RewriteRule
模式来捕获。
RewriteCond %{REQUEST_URI} !=/main.cgi RewriteRule .*/main.cgi
但是,这会删除url路径。例如,这个网址:example.com/hello将被重定向到example.com.
这些指令实际上无效(RewriteRule
缺少第二个参数(,所以实际上不能执行任何操作?然而,RewriteRule
模式.*/main.cgi
与您之前所述的URL不匹配,因此,我看不出这会有什么作用。(?(