Модуль перезаписи, не может соответствовать символу точки? - PullRequest
1 голос
/ 03 ноября 2011

У меня есть сайт, использующий модуль переписывания Apache. Проблема в том, что я использую RewriteRule следующим образом:

RewriteRule ^([^/]+)/?$ /index.php?p1=$1 [L]

Мне нужно сопоставить все символы, кроме "/", но это не работает. Счетчик ошибки «Запрошенный URL не найден на этом сервере».

это работает с этим правилом:

RewriteRule ^([^/\.]+)/?$ /index.php?p1=$1 [L]

но это правило не будет соответствовать "точке", поэтому всякий раз, когда у URL есть "точка", оно будет соответствовать тому же, что и выше.

Пожалуйста, помогите

1 Ответ

1 голос
/ 03 ноября 2011
RewriteRule ^([^/]+)/?$ /index.php?p1=$1 [L]

Причина, по которой это не работает, заключается в том, что существует внутренний цикл перенаправления, скажем, вы получаете запрос /zoo:

  1. zoo (без косой черты здесь) соответствует ^([^/]+)/?$, а URL переписывается на /index.php?p1=zoo
  2. zoo и /index.php различаются, поэтому он перенаправляется изнутри, и правила применяются снова, начальный слеш удаляется
  3. index.php соответствует ^([^/]+)/?$, переписывается в /index.php?p1=index.php
  4. index.php и /index.php различны, поэтому внутреннее перенаправление снова
  5. повторить 3 и 4

Один из способов остановить цикл - изменить правило на:

RewriteRule ^([^/]+)/?$ index.php?p1=$1 [L]

Так что index.php будет соответствовать index.php (без косой черты), но лучшим способом было бы добавить некоторые условия перезаписи:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Перед правилом перезаписи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...