Назад | Перейти на главную страницу

Запрос Apache содержит полный физический путь, если в конце опущена косая черта

Моей первоначальной целью было переписать запросы на 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.