mod_rewrite не переписывает - PullRequest
       0

mod_rewrite не переписывает

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

У меня есть следующий код:

RewriteEngine on
RewriteRule ^user/([a-z]+)$ index.php?Agent=$1 [QSA]

теоретически любой посетитель моего сайта в формате:

www.site.com/user/username

должен быть направлен на:

www.site.com/index.php?Agent=username

вместо этого они обрабатываются так, как будто / user является реальным каталогом и как будто / user / username является допустимым файлом и существует (чего нет).Любые идеи?

EDIT # 1

Я немного изменил свой htaccess и даже снял требование / user, следующие причины .htaccess файл и ошибка 500, даже при посещении одного основного домена(www.site.com):

ErrorDocument 404 /404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^(.+)$ index.php?Agent=$1 [QSA]

Ответы [ 3 ]

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

вместо этого они обрабатываются так, как будто / user является реальным каталогом, и как будто / user / username является допустимым файлом и существует (чего нет).

Что именноВы имеете в виду, как это?Что это показывает?

Хотите переписать или ** перенаправить?

Переписать = позвонить www.site.com/index.php?Agent=username, когда пользователь входит на сайт www.site.com/user/username

Redirect = перенаправить пользователя на другой URLпоэтому их адресное поле гласит: www.site.com/index.php?Agent=username

Прямо сейчас ваш код должен переписывать, а не перенаправлять, что, вероятно, вам и нужно.Просто проверяйте ...

Ваша проблема может заключаться в том, что имя пользователя, с которым вы тестируете, содержит заглавные буквы.Добавьте NC, чтобы сделать регистр нечувствительным к регистру.

RewriteRule ^user/([a-z]+)$ index.php?Agent=$1 [QSA,NC]

Если вы хотите разрешить другие символы, кроме букв az, вы можете добавить больше символов в класс символов или просто написать (.+), чтобы соответствовать любомусимвол.

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

В соответствии с вопросом ниже, я думаю, что бесконечное перенаправление происходит, потому что правило запускается снова (и снова), потому что перезапись соответствует новому индексузапрос .php.Простая проверка того, что цель перенаправления не является файлом, должна решить эту проблему.(-f = "это файл".! = условие отрицания.)

RewriteCond %{REQUEST_FILENAME} !-f
1 голос
/ 23 февраля 2011

должно работать. Я использую в значительной степени именно эту строку для моей переписать. Вот что у меня есть:

RewriteRule ^history/(.+)?$ history.php?display_name=$1 [QSA,L]

Обратите внимание на флаг "L", который означает, что mod_rewrite должен остановиться на этом этапе и не обрабатывать другие правила перезаписи. У вас есть другие правила переписывания после этого?

Вы кладете это в .htaccess? Убедитесь, что он обрабатывается вообще. Поместите туда случайный мусор и загрузите страницу. Apache должен показать вам страницу с ошибкой, сообщающую о неправильной настройке сервера. Если это не так, он даже не смотрит на ваш файл .htaccess. Убедитесь, что в конфигурации Apache для параметра «AllowOverride» установлено значение «Параметры FileInfo» для каталога, в котором находится эта веб-страница.

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

Это удар в темноте, но я предлагаю вам перепроверить файл конфигурации Apache apache2.conf, чтобы убедиться, что mod_rewrite включен.

Ищите строку вроде этой: #LoadModule rewrite_module modules/mod_rewrite.so

и измените его на: LoadModule rewrite_module modules/mod_rewrite.so

РЕДАКТИРОВАТЬ: Затем перезапустите веб-сервер, чтобы изменения вступили в силу!

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

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