цикл перенаправления htaccess - PullRequest
       9

цикл перенаправления htaccess

0 голосов
/ 17 сентября 2011

Я пытаюсь, чтобы мои URL выглядели "лучше". Вместо x.com/reset-password/?email=name@x.com я хочу, чтобы это был x.com/reset-password/name@x.com

Используя mod_rewrite, я заставил его работать для каждой соответствующей строки, за исключением строк с точками (.). Когда я разрешаю точки в операторе RewriteRule, возникает внутренняя ошибка сервера. Я думаю, это потому, что даже когда применяется флаг L, он должен в последний раз перенаправить на новое место назначения и, следовательно, войти в бесконечный цикл, поскольку мое регулярное выражение слишком мягкое.

Я пытаюсь использовать RewriteCond, чтобы не допустить перенаправления любых URI со знаком равенства, что решает проблему бесконечного цикла, но это не правильно. Я спрашиваю одно из двух решений, я думаю: либо способ включить точки в исходное регулярное выражение, либо способ остановить URI с = от оценки

Исходное регулярное выражение:

RewriteRule ^([^.]+)$ ?email=$1 [L]

Модифицированный:

RewriteCond %{REQUEST_URI} ^[^=]+$  
RewriteRule ^(.+)$ ?email=$1 [L]

Я знаю, что в Интернете много обучающих программ по regex / htaccess (я провел последние несколько часов, читая их ...), но я не могу понять это. Любая помощь приветствуется!

1 Ответ

1 голос
/ 17 сентября 2011

Вы должны использовать QUERY_STRING вместо REQUEST_URI, поскольку = находится в QUERY_STRING:

RewriteCond %{QUERY_STRING} ^[^=]+$  
RewriteRule ^(.+)$ ?email=$1 [L]
...