2013-03-29 3 views
0

У меня есть блог PHP, основанный на Apache с простым mod_rewrite происходит:mod_rewrite затрагивающий получения переменных

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^(.*)$ index.php?story=$1 [L] 

Однако, когда я смотрю на $ _GET [ «история»] в PHP скрипт, он дает мне " index.php "каждый раз.

Любые идеи?

+0

Это в DOCUMENT_ROOT? Или у вас есть более высокий каталог RewriteRules? Включите 'RewriteLog', чтобы отладить его в деталях. – mario

+1

'$ 1' - это то, что было уловлено' (. *) ', Поэтому оно будет захватывать что угодно от начала до конца (из-за'^'и' $ '). Каков URL, который вы указали для наличия '$ _GET ['story']' to 'index.php'? – MatRt

+0

example.com/blog/index.php?story=12345 = example.com/blog/12345 – Richard

ответ

1

Apache снова запустит правила, если в ходе прохода произойдут какие-либо изменения, которые вызывают внутреннюю или внешнюю перенаправление. Вы должны поймать это с правилом для index.php

RewriteRule ^index\.php$ - [L] 

, который просто использует этот адрес как есть. Это то, что делает WordPress.

В зависимости от вашей версии apache вы можете установить уровень журнала перезаписи на 8 либо с помощью RewriteLogLevel или LogLevel. В старых версиях это должно быть сделано в httpd.conf, поэтому вам нужен локальный тестовый сайт.

Не оставляйте это сообщение, иначе ваше качество пострадает.

Edit:

Вот цитата из docs on the rerun под L флагом:

Если вы используете RewriteRule либо в файлах .htaccess или в разделах, важно иметь некоторое представление о том, как правила обрабатываются. Упрощенная форма этого заключается в том, что после того, как правила были обработаны, переписанный запрос передается механизму синтаксического анализа URL-адресов, чтобы делать то, что может быть с ним. Вполне возможно, что по мере обработки обработанного запроса файл или раздел .htaccess может быть встречен снова, и, следовательно, набор правил может снова запускаться с самого начала. Чаще всего это произойдет, если одно из правил вызывает перенаправление - внутреннее или внешнее - заставляя процесс запроса начать работу.

+0

Мне просто интересно, сколько раз это происходит, и что заставляет его останавливать цикл –

+0

@WalterTross Вы можете легко создать бесконечный цикл перезаписи, Я сделал это пару раз этим днем. Большинство браузеров сообщают вам, жалуясь на слишком много перенаправлений. –

+0

да, но в этом случае есть [L], no [R], и кажется, что что-то вроде 'index.php? Story = index.php' или' index.php? Story = index.php? Story = ... 'действительно был вызван –

Смежные вопросы