Проблема .htaccess RewriteRule - PullRequest
       0

Проблема .htaccess RewriteRule

0 голосов
/ 22 февраля 2011

Это может показаться простым .htaccess RewriteRule, но у меня все еще есть проблемы с ним.

По сути, я хотел бы, чтобы любой текст после домена интерпретировался как index.php?$text, если, конечно, этот текст не является именем файла.

Пример:

http://domain.com/register -> http://domain.com/index.php?register

http://domain.com/images/image.jpeg -> http://domain.com/images/image.jpeg

Это то, что я имею до сих пор:

RewriteRule ^[A-Za-z]+$ index.php?$1

Однако он не передает переменную $ _GET на страницу PHP, как следует.

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ Я использую PHP - поэтому, если есть лучший способ написания сценариев, чем .htaccess, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Во-первых, вы никогда не группируете (сохраняете) текст, поэтому $ 1 равен "".Вы должны использовать:

RewriteRule ^([A-Za-z]+)$ index.php?$1

Во-вторых, если вы хотите игнорировать имена файлов (что-нибудь с '.' В нем).Используйте:

RewriteCond %{REQUEST_URI} "^([^\.]*)$"
RewriteRule ^([.]+)$ index.php?$1

, который говорит, что путь после домена не содержит «.»перепишите его как index.php? foo

Если вы хотите ограничить расширения имени файла, используйте:

RewriteCond %{REQUEST_URI} "^([^\.(php|jpeg|html|css|ico)]*)$"
RewriteRule ^([.]+)$ index.php?$1
1 голос
/ 22 февраля 2011

Добавьте флаг QSA к правилу перезаписи, чтобы оно выглядело как

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA]

QSA (добавление строки запроса) добавляет строку запроса в результаты перезаписи. поэтому любые $ _GET будут добавлены к тому, что передается вашему php-скрипту.

Вы можете подумать и о добавлении флага L, особенно если это все, что вы пытаетесь сделать с перезаписью. Он сообщает процессору, что если это правило обрабатывает его конец перезаписи.

Так бы это выглядело

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA,L]

Я также часто добавляю NC, что делает его нечувствительным к регистру, поэтому вам не нужно обрабатывать как верхний, так и нижний регистр, как вы делаете в своем регулярном выражении.

Еще одна вещь, которую нужно иметь в виду, это то, что вы не проходите $ 1 как правильный get var. было бы лучше назвать вар, на котором он появляется. И я только что заметил, что вы не создаете переменную за 1 доллар. Попробуйте это.

RewriteRule ^([A-Za-z]+)$ index.php?urlRequest=$1 [QSA,L]

Затем проверьте это в своей index.php

echo $_GET['urlRequest'];

Надеюсь, это поможет!

...