Переменная mod_rewrite всегда == 'index.php' - PullRequest
0 голосов
/ 02 декабря 2011

У меня следующая структура файла:

/framework
    /.htaccess
    /index.php

и следующие правила в моем файле .htaccess:

<IfModule mod_rewrite.c>

  RewriteEngine on
  RewriteRule ^(.*)$ index.php?q=$1 [L]

</IfModule>

Когда я перейду к http://localhost/framework/example, я ожидаю запросстрока равна «framework / example», но вместо этого равна «index.php».Зачем?И как мне получить переменную равной, когда я ожидаю это?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Ваши правила перезаписи зациклены. Mod_rewrite не прекратит переписывать, пока URI (без строки запроса) не будет одинаковым до и после прохождения правил. Когда вы первоначально запрашиваете http://localhost/framework/example, вот что происходит:

  1. Переписать движок, берет /framework/example и убирает ведущие "/"
  2. framework/example ставится через правила
  3. framework/example переписывается на index.php?q=framework/example
  4. Рерит двигатель сравнивает до и после, framework/example! = index.php
  5. index.php?q=framework/example возвращается к правилам перезаписи
  6. index.php переписывается в index.php?q=index.php
  7. Переписанный движок сравнивает до и после, index.php == index.php
  8. Перезапись двигателя останавливается, результирующий URI равен index.php?q=index.php

Вам нужно добавить условие, чтобы оно не перезаписывало один и тот же URI дважды:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)$ index.php?q=$1 [L]
3 голосов
/ 02 декабря 2011

Поскольку вы переписали URL с помощью RewriteRule и уже поместили предыдущий путь к q.Так что просто используйте $_GET['q']

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