#apache #configuration #cgi
#apache #конфигурация #cgi
Вопрос:
Я настраиваю веб-сервер Apache (на Ubuntu 18.04) с помощью CGI-скрипта, но мне нужен чистый URL-адрес без «cgi» в нем.
У меня уже есть функционирующий скрипт (на Perl), который для целей этого вопроса я вызову myscript
.
1. localhost/cgi-bin/myscript
(работает)
Если я вставлю скрипт /usr/lib/cgi-bin/myscript
, он будет работать с URL localhost/cgi-bin/myscript
.
2. localhost/myscript.cgi
(работает)
В качестве альтернативы я могу перенастроить /var/www / для запуска файлов с расширениями .cgi или .pl как CGI:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
Options ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
Это работает, ЕСЛИ я добавлю расширение .cgi: myscript.cgi
. Тогда URL localhost/myscript.cgi
работает.
3. localhost/myscript
???
Но я не хочу cgi
указывать свой URL. Я просто хочу localhost/myscript
запускаться myscript
как CGI. (И я не хочу, чтобы другие файлы в ROOT были CGI).
Возможно ли это?
Ответ №1:
Вы не можете сделать это напрямую. Однако вы могли бы перенаправлять запросы на конкретные URL-адреса без расширения на соответствующие .cgi.
Вы можете протестировать их с .htaccess
файлом, чтобы избежать необходимости перезагружать сервер.
В вашем <VirtualHost ...>
разделе :
<Directory /your/web/dir/>
Require all granted
AllowOverride All
</Directory>
В /your/web/dir/.htaccess
:
Options ExecCGI
AddHandler cgi-script .cgi
Redirect "/test" /test.cgi
# or
# RedirectMatch "^/(test)$" /$1.cgi
Другой возможностью было бы использовать mod_rewrite и перенаправлять вызовы любого существующего исполняемого файла в файл с тем же именем, но с расширением .cgi. Файл без расширения должен существовать и может быть пустым.
В /your/web/dir/.htaccess
:
Options ExecCGI
AddHandler cgi-script .cgi
RewriteEngine On
# If not already .cgi and executable, redirect to .cgi
RewriteCond /your/web/dir/%{REQUEST_URI} "!.cgi$"
RewriteCond /your/web/dir/%{REQUEST_URI} -x
RewriteRule ^(. ) /$1.cgi [R]
Конечно, вы можете использовать любое другое расширение, кроме .cgi. Например, .x
если вы установите AddHandler cgi-script .x
.