Нужна помощь с .htaccess, похоже, не работает - PullRequest
2 голосов
/ 06 декабря 2010

В настоящее время у меня есть параметры URL, подобные этому http://www.website.com/index.php?user&page=edit

И в index.php я установил, если установлено $_GET['user'], отобразить страницу пользователя, а внутри страницы пользователя я сделал что-то вроде, если $_GET['page']set затем найдите страницу (в данном случае отредактируйте) и загрузите эту страницу.

Это хорошо работает.,

Но какие изменения мне нужно внести в файл htaccess, чтобы URL стал похожимthis http://www.website.com/user/ - to load user file и http://www.website.com/user/edit - to load user edit file

Вот мое содержимое файла htaccess

Options +FollowSymLinks

RewriteEngine On

RewriteRule ^(.*)/$ index.php?$1

RewriteRule ^(.*)/(.*)/$ index.php?$1&page=$2

Но, похоже, это не работает так, как я ожидал.

Если я загружаюhttp://www.website.com/user/edit - it works но если я просто загружу /user/ - it doesn't

Ответы [ 4 ]

1 голос
/ 06 декабря 2010

Я думаю, что на вопрос уже дан ответ, но ваше правило может быть улучшено.

RewriteRule ^([a-zA-Z]*)/$ index.php?$1
// ...

Так что оно не соответствует / (косая черта), и вы не столкнетесь с этими проблемами; -)

1 голос
/ 06 декабря 2010

Попробуйте переключить оба правила и добавить флаг L:

RewriteRule ^(.*)/(.*)/$ index.php?$1&page=$2 [L]
RewriteRule ^(.*)/$ index.php?$1 [L]

.*, соответствующий каждой последовательности символов.Это означает, что user/edit/ совпадает с user/.Сначала нужно поместить более конкретное правило, чтобы убедиться, что между ними стоит /.Я предлагаю вам изменить эти правила на что-то вроде этого, поскольку другие правила могут соответствовать вещам, которые вы не намеревались:

RewriteRule ^([^/]+)/([^/]+)/$ index.php?$1&page=$2 [L]
RewriteRule ^([^/]+)/$ index.php?$1 [L]

[^/]+ будет соответствовать каждой последовательности, которая не содержит /.

0 голосов
/ 06 декабря 2010

Поскольку .* соответствует чему-либо , ваше первое правило всегда будет применяться.

Вы должны использовать более конкретный шаблон, например [^/]+ (что угодно, кроме /) вместо .*:

RewriteRule ^([^/]+)/$ index.php?$1
RewriteRule ^([^/]+)/([^/]+)/$ index.php?$1&page=$2

Теперь первое правило будет применяться только к путям с одним сегментом, а второе к путям с двумя сегментами.

0 голосов
/ 06 декабря 2010

Параметры + FollowSymLinks

RewriteEngine Вкл.

RewriteRule ^ (. *) ([^ \ /.] +) /? $ Index.php? $ 1

RewriteRule^ (. ) / (. ) / $ index.php? $ 1 & page = $ 2

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