Конфликт с правилом mod_rewrite? - PullRequest
0 голосов
/ 01 декабря 2011

Как мне переписать www.mysite.com/login на www.mysite.com/login.php вместе с несколькими другими страницами сайта, такими как «поиск» и «регистрация» и т. Д.?

Я пыталсясделайте это с

RewriteRule ^(.+). $1.php [R,NC]

, но вместо этого получите действительно неприятный цикл перенаправления.: /

Я также хотел бы переписать www.mysite.com/Elvis на www.mysite.com/profile?username=Elvis, что, я уверен, противоречит первому правилу.

Это возможно?

1 Ответ

0 голосов
/ 01 декабря 2011

Вот что должно работать:

# if the URL doesn't end with "php":
RewriteCond %{REQUEST_URI} !(.+)\.php$
# then whatever it is, add php at the end:
RewriteRule (.+) $1.php [NC]

Ваши ошибки:

  • директива R = принудительное перенаправление = оно перенаправит браузер клиента на новый, и клиент увидит это (URL, и я полагаю, это не то, что вы хотите сделать)
  • ^ и . бесполезны и (возможно) приводят к ошибкам.

Если это не сработает, возможно, это очень близко к тому, что вы хотите.

Два совета:


Пожалуйста, попробуйте использовать директиву RewriteLog: она поможет вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

...