Перезапись Apache: добавить обработчик CGI перед каждым путем запроса?

#apache #.htaccess #mod-rewrite #cgi

#apache #.htaccess #модификация-перезапись #cgi

Вопрос:

У меня есть каталог, в котором размещено веб-приложение Sinatra. Из-за некоторых ограничений хостинга мне приходится запускать это приложение с помощью CGI-скрипта; однако я написал его для анализа части пути URL, а не только строки запроса. Таким образом, большинство моих запросов записываются как:

GET /point/get HTTP/1.0

Однако из-за CGI-скрипта фактический вызываемый URL-адрес (например)http://server.com/script.cgi/point/get .

Есть ли способ, используя mod_rewrite, вставлять это script.cgi/ в каждый поступающий запрос?

Ответ №1:

Попробуйте это в вашем .htaccess:

 Options  FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} !^GETs/script.cgi/ [NC]
RewriteCond %{REQUEST_URI} !/script.cgi/ [NC]
RewriteRule ^(.*)$ /script.cgi/$1 [L,R]
  

Это приведет к внешнему перенаправлению.

Для внутреннего перенаправления замените последнюю строку на эту:

 RewriteRule ^(.*)$ /script.cgi/$1 [L]
  

Комментарии:

1. Это почти работает, но не останавливается после одного добавления — вместо этого выполняется цикл добавления /server.cgi/server.cgi/... до тех пор, пока браузер не перестанет выполнять перенаправления.

2. Я обновил свой ответ. Для внешнего перенаправления это работало нормально, но для внутреннего это было зацикливание, поэтому я теперь предоставил оба варианта.