Сбой перезаписи в подкаталоги

#php #regex #.htaccess #mod-rewrite

#php #регулярное выражение #.htaccess #мод-перезапись

Вопрос:

В принципе, это работает (http://example.com/@user):

RewriteRule ^@([a-zA-Z0-9] )[/]*$ find.php?twitter=$1 [QSA,L]

и это (http://example.com/api/@user ):

RewriteRule ^ api/@([a-zA-Z0-9] )[/]*$ twitter.php?username=$1 [QSA,L]

не выполняется. Я не уверен почему, но кажется, что всякий раз, когда я пытаюсь это сделать, он перенаправляет на http://example.com/@user функция, если это имеет смысл. По сути, правило перезаписи игнорирует префикс «api /».

Комментарии:

1. Вы поставили второе правило первым в вашем htaccess?

2. да, похоже, проблема не в этом. Ошибки также происходят с другими правилами htaccess, которые имеют префикс подкаталога, даже если у них нет части счетчика без префикса. Основная проблема в том, что RewriteEngine не определяет подкаталоги. Я считаю, что это ошибка моего синтаксиса.

3. можете ли вы привести пример до и после для второго правила?

Ответ №1:

Я попробовал следующий синтаксис на тестовом сервере, и он отлично сработал find. В if у вас не работает, проблема, вероятно, не в регулярном выражении…

 RewriteEngine on 

RewriteRule ^api/@([a-zA-Z0-9] )/?$ twitter.php?username=$1 [QSA,L]
RewriteRule ^@([a-zA-Z0-9] )/?$     find.php?twitter=$1 [QSA,L]
  

Комментарии:

1. возможно, вы можете объяснить, почему. gist.github.com/5b0099f6aafc6c6a1b7b это мой файл htaccess. Ни один из перезаписывающих элементов, начинающихся с foo /, не работает, и, похоже, специфичный для api, предпочитает следовать правилу соответствующего правила.