#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]