Как я могу запустить CGI-скрипт без расширения из корня Apache?

#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 .