Моей первоначальной целью было переписать запросы на http://server.com/node/XXXXX
к http://server.com/node/index.cgi?XXXXX
. node
на самом деле это физический каталог, содержащий index.cgi
, расположенный непосредственно под корнем документа. Это довольно просто:
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteBase /node
RewriteCond %{REQUEST_FILENAME} !index.cgi
RewriteRule ^(.*)$ /node/index.cgi?$1 [L,QSA]
...в .htaccess
файл под /real/path/to/web/stuff/node
.
Обратите внимание, что это означает запросы формы http://server.com/node/
предоставить пустую строку запроса для index.cgi
, чего я и хочу.
Итак, теперь сложная часть: я хочу, чтобы запросы http://server.com/node
перенаправить на http://server.com/node/
- который, как указано выше, перенаправляет на index.cgi
с пустым QS. Проблема в том, что если у меня нет правил в моем корневом каталоге, запрос на http://server.com/node
действительно кажется, идет к http://server.com/node/
- но я обнаружил, что строка запроса, переданная index.cgi
полный физический путь, соответствующий запросу (/real/path/to/web/stuff/node
)!
Я пробовал правило в своем корневой уровень .htaccess
лайк:
RewriteCond %{REQUEST_URI} =/node
RewriteRule ^(.*)$ /node/ [L] # (also tried [L,R=302])
Но это не действует.
Я понимаю, что Apache добавляет в конце косую черту под капотом, но я не могу использовать DirectorySlash Off
... и я бы не хотел, если бы мог, поскольку у меня есть установка Drupal, находящаяся в корне (там есть куча похожих правил перезаписи, но я не думаю, что они мешают).
Так можно ли создать правило для корневого каталога .htaccess
что работает, или изменить /node/.htaccess
чтобы это не имело значения? Даже физическое перемещение вещей не выходит за рамки разумного.
Он находится на хосте под управлением Apache 1.3.41 на FreeBSD 7.3. У меня нет возможности что-либо изменить в самой конфигурации сервера, только мой .htaccess
файлы (что означает, что я даже не могу включить перезапись журнала!).
В документации Apache 1.3 есть запись, относящаяся к "проблеме конечной косой черты", может быть, это поможет вам в этом сценарии.
Что касается ваших правил с идентификаторами узлов, RewriteBase может быть вашей проблемой, поскольку «префикс локального каталога удаляется ... и ваши правила перезаписи действуют только на остаток», как описано в документы RewriteBase.