Задать вопрос
@RoffDaniel

Почему некорректно работает ЧПУ?

Всем привет. У меня возникла проблема с ЧПУ ссылками.
У меня есть такие страницы как:

?page=admin
?page=admin&adminpage=users
?page=admin&adminpage=users&action=add
?page=admin&adminpage=news
?page=admin&adminpage=news&action=add


Вот полный код .htaccess:
RewriteEngine On

RewriteBase /

AddDefaultCharset UTF-8

ErrorDocument 401 /site-system/errors/401.php
ErrorDocument 403 /site-system/errors/403.php
ErrorDocument 404 /site-system/errors/404.php
ErrorDocument 500 /site-system/errors/500.php
#==============================================================
RewriteRule ^([^/]*)/$ /index.php?page=$1 [L]
#===========================NEWS===============================
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?page=$1&url=$2 [L]
#==============================================================
#===========================ADMIN==============================
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?page=$1&adminpage=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ /index.php?page=$1&adminpage=$2&action=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /index.php?page=$1&adminpage=$2&action=$3&id=$4 [L]
#==============================================================
# RewriteRule ^logout/$ /site-system/functions/logout.php [L]
#==============================================================

############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$
   # Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d
   # И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
   # Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$
   # И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]
   # Исключить слеш.

############################################################################
#### Добавляем слеш(/), если его нет, и это не файл.                    ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
   # Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
   # Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
   # В URL нет точки (файл).
RewriteCond %{REQUEST_URI} ^(.+)$
 # В URL есть хоть один символы
RewriteRule ^(.*)$ $1/ [L,R=301]
   # Добавляем слеш в конце.


Теперь вопрос. Почему когда я ввожу "/admin/users/", у меня по стути открывается главная страница админ панели "?page=admin". То же самое с /admin/news/', выводит главную страницу. А вот если я ввожу "/admin/users или news/add", то открывается нужная странца...
Вот еще прикреплю PHP код:
<?php


class admin extends engine_admin {
    public function get_content() {
        if (!isset($_GET['adminpage'])) {
            echo 'test admin index';
        } else {
            if ($_GET['adminpage']) {
                $page = $_GET['adminpage'];
                if ($page == 'users') {
                    if (!isset($_GET['action'])) {
                        echo '
                        test 2 users list
                        ';
                    } else {
                        if ($_GET['action']){
                            $action = $_GET['action'];
                            if ($action == 'add') {
                                echo '
                                test 2 add new user
                                ';
                            }
                        }
                    }
                } else if ($page == 'news') {
                    if (isset($_GET['action'])) {
                        echo '
                        test 3 news list
                        ';
                    } else {
                        if ($_GET['action']){
                            $action = $_GET['action'];
                            if ($action == 'add') {
                                echo '
                                test 3 add new news
                                ';
                            }
                        }
                    }
                }
            }
        }
    }
}
  • Вопрос задан
  • 59 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@RoffDaniel Автор вопроса
Вообщем, может правильно, а может нет, но я решил эту проблема таким вот способом:

RewriteRule ^admin/([^/]*)/$ /index.php?page=admin&adminpage=$1 [L]
RewriteRule ^admin/([^/]*)/([^/]*)/$ /index.php?page=admin&adminpage=$1&action=$2 [L]
RewriteRule ^admin/([^/]*)/([^/]*)/([^/]*)/$ /index.php?page=admin&adminpage=$1&action=$2&id=$3 [L]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы