Попробуйте добавить /
перед ним и $
в конце.
Как:
RewriteRule ^/(.*)$ cgi-bin/router.py?request=$1 [NC]
Кроме того, я считаю, что лучше всего использовать директиву RewriteBase
при тестировании. Тогда вы можете просто изменить это вместо того, чтобы возиться с самими регулярными выражениями.
RewriteBase /test/
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]
А когда переехал в реальный мир:
RewriteBase /
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]
Редактировать
После еще одного тестирования я обнаружил, что проблема, возможно, не в самом выражении, а в имени вашего каталога: cgi-bin/
. Apache по умолчанию использует этот каталог для сценариев CGI, но использует ScriptAlias
для перенаправления запросов на /cgi-bin/*
в другой каталог. В моем случае это каталог с таким же именем в каталоге установки Apache.
Это каталог, который вы создали сами, или вы используете каталог, к которому Apache присвоил это имя?
Вы должны либо
- Использовать каталог, указанный Apache в конфигурации
- Отредактируйте конфигурацию, чтобы вы могли указать это самостоятельно, или
- Выберите другое имя каталога.
Лично я бы пошел с # 3. Я попробовал это, и у меня все заработало.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !bin/
RewriteRule ^(.+) bin/request.php?ctrl=$1 [NC,L]
</IfModule>