.htaccess mod_rewrite $_GET не работает

#apache #.htaccess #mod-rewrite

#apache #.htaccess #мод-перезапись

Вопрос:

У меня есть следующая строка mod_rewrite (это единственная строка в файле .htaccess). Это работает, когда я меняю первое имя на что-то другое login , но по какой-то причине не удается передать $_GET['initials'] , когда это то же имя, что и у фактического скрипта. Он каким-то образом перезаписывает свою собственную перезапись?

 RewriteRule ^login/([a-z]{1,5}) login.php?initials=$1 [L]
  

Редактировать:

Глядя на $ _SERVER, это страница, которую в конечном итоге загружает PHP:

 'PHP_SELF' => string '/admin/login.php/abc' (length=19)
  

где ‘abc’ — это предоставленные инициалы. Таким образом, он полностью удаляет строку запроса и пытается загрузить эту страницу, которая каким-то образом загружается login.php и не 404, даже если каталог / abc не существует?

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

1. работает ли добавление $? RewriteRule ^login/([a-z]{1,5})$ login.php?initials=$1 [L] у вас есть RewriteBase / набор?

2. Нет, это все равно не удается.. У меня нет набора базы перезаписи, я впервые об этом слышу..

3. Стоит отметить, что .htaccess находится в подкаталоге, а не в базовом каталоге apache.

4. Это пример, который я использую; RewriteRule ^order/([a-z0-9])$ /retailer/order.php?order_ref=$1 с RewriteEngine On и RewriteBase /retailer/ и это работает для меня с /order/order, где вторым порядком является order_ref , поэтому ваш ДОЛЖЕН работать… Возможно, попробуйте RewriteBase /subdirectory/ (перед перезаписью), а затем измените login.php на /subdirectory/login.php ?

5. РЕШАЕМАЯ: MultiViews был включен в файле конфигурации сайта, который автоматически добавлял расширение файла .php в «login». Исправлено путем установки «-Multiviews» в конфигурации.

Ответ №1:

Попробуйте использовать это вместо:

 RewriteEngine On
RewriteBase /SUBDIRECTORY_NAME_HERE/
RewriteRule ^login/([^/]*)/$ /login.php?initials=$1 [L]
  

Также может помочь, если вы добавите подкаталог перед login.php .

 RewriteRule ^login/([^/]*)/$ /SUBDIRECTORY_NAME_HERE/login.php?initials=$1 [L]
  

Ответ №2:

Это в комментариях выше, но на самом деле это не говорит вам, что делать.
Options -Multiviews
Options FollowSymLinks
RewriteEngine On
RewriteBase /SUBDIRECTORY_NAME_HERE/
RewriteRule ^login/([^/]*)/$ /login.php?initials=$1 [L]