Apache rewriteRule для корневого каталога - PullRequest
0 голосов
/ 27 ноября 2009

При создании веб-сайта я использовал следующее правило в .htaccess:

RewriteRule ^test/(.*) cgi-bin/router.py?request=$1 [NC]

Когда пользователь переходит на mysite.com/test/something, он перенаправляется на cgi-bin/router.py?request=something. Это сработало очень хорошо. Я уже закончил сайт и хочу его включить. Однако простое удаление бита test/ из правила не работает, хотя в соответствии с здесь и здесь :

RewriteRule ^(.*) cgi-bin/router.py?request=$1 [NC]

Я также попытался ^$, но затем я теряю то, что было введено пользователем в URL.

Я неправильно понял свое выражение?

1 Ответ

1 голос
/ 27 ноября 2009

Попробуйте добавить / перед ним и $ в конце.
Как:

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 присвоил это имя?
Вы должны либо

  1. Использовать каталог, указанный Apache в конфигурации
  2. Отредактируйте конфигурацию, чтобы вы могли указать это самостоятельно, или
  3. Выберите другое имя каталога.

Лично я бы пошел с # 3. Я попробовал это, и у меня все заработало.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} !bin/
    RewriteRule ^(.+) bin/request.php?ctrl=$1 [NC,L]
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...