#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. Я обновил свой ответ. Для внешнего перенаправления это работало нормально, но для внутреннего это было зацикливание, поэтому я теперь предоставил оба варианта.