Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: как научить?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Без описания
sc2r2bey
Отправлено: 26 Апреля, 2012 - 23:41:12
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




есть фрагмент файла .htaccess:
CODE (text):
скопировать код в буфер обмена
  1. RewriteRule ^([a-z]+)/([0-9]+)/?$ index.php?com=$1&id=$2 [L]
  2. RewriteRule ^([a-z]+)/([0-9]+)/?$ index.php?com=$1&cat=$2 [L]


при обработке ссылки вида http://site[dot]ru/article/1/ он получает правильные данные в массив $_GET, т.е. com=article, а id=1


но при обработке ссылки вида http://site[dot]ru/news/1/ он получает неправильные данные в массив $_GET, а именно com=news, а id=1, а надо com=news, а cat=1, т.е. он применяет первое правило, и игнорирует пвторое, как сделать, чтоб он срабатывал как надо?
 
 Top
OrmaJever Модератор
Отправлено: 26 Апреля, 2012 - 23:55:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Ну дак у вас же оба правила одинаковые чего вы хотите? Перепишите более конкретно, для первого правила перая часть article, для второго первая часть news


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
sc2r2bey
Отправлено: 27 Апреля, 2012 - 00:08:16
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




спасибо вы правы, а если будут добавляться новые модули, как тогда опять вручную править?
 
 Top
OrmaJever Модератор
Отправлено: 27 Апреля, 2012 - 00:20:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Ну а как вы хотите? Под правило [a-z]+ подходят все англиские слова.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
sc2r2bey
Отправлено: 27 Апреля, 2012 - 00:24:22
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




выхода нет? Недовольство, огорчение
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Апреля, 2012 - 00:53:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Вместо [a-z]+ указывайте явное значение.

RewriteRule ^([article|news]+)/([0-9]+)/?$ index1.php?com=$1&id=$2 [L]
RewriteRule ^([article|news]+)/([0-9]+)/?$ index1.php?com=$1&cat=$2 [L]

(Отредактировано автором: 27 Апреля, 2012 - 01:10:48)

 
 Top
sc2r2bey
Отправлено: 27 Апреля, 2012 - 01:04:52
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




[quote=armancho7777777][/quote]это я понял, но если модули добавятся, что снова вручную править?
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Апреля, 2012 - 01:12:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




sc2r2bey пишет:
armancho7777777 пишет:
это я понял, но если модули добавятся, что снова вручную править?

Думаю да.
Или адрес на уровень длиннее сделать.

(Отредактировано автором: 27 Апреля, 2012 - 01:18:29)

 
 Top
sc2r2bey
Отправлено: 27 Апреля, 2012 - 01:20:12
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




armancho7777777 пишет:
Думаю да.
Или адрес на уровень длиннее сделать.
не совсем понял
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Апреля, 2012 - 01:21:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




CODE (html):
скопировать код в буфер обмена
  1.  
  2. <a href="http://site.ru/article/id/1/">Статьи</a>
  3. <a href="http://site.ru/news/cat/1/">Новости</a>
  4.  


RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)/?$ index.php?com=$1&$2=$3 [L]
RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)/?$ index.php?com=$1&$2=$3 [L]

(Отредактировано автором: 27 Апреля, 2012 - 01:23:31)

 
 Top
sc2r2bey
Отправлено: 27 Апреля, 2012 - 01:23:24
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




понял ход мысли
можно еще наверное через алиасы реализовать пока ответ не получил в этой теме http://forum.php.su/topic.php?forum=1&topic=7971

(Отредактировано автором: 27 Апреля, 2012 - 01:24:11)

 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Апреля, 2012 - 01:28:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Вообще я пользуюсь другим способом)
Зайдите сюда play-mix[dot]ru, наберите в поиске что-то, и после полученного результата посмотрите на адесную строку.
Будет интересно, объясню.

(Отредактировано автором: 27 Апреля, 2012 - 01:30:23)

 
 Top
sc2r2bey
Отправлено: 27 Апреля, 2012 - 01:31:18
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




armancho7777777 пишет:
Будет интересно, объясню.
буду признателен!
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Апреля, 2012 - 01:38:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1. <a href="/<?=urlencode('первый_уровень')?>/<?=urlencode('второй_уровень')?>/">Ссылка</a>


Перенаправляем все вызовы в индексный файл:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]

Обрабатываем полученный результат:

PHP:
скопировать код в буфер обмена
  1. $addr = explode('/', str_replace('_', ' ', htmlspecialchars(trim(urldecode($_SERVER['REQUEST_URI']), '/'))));
  2.  
  3. $addr[0]; // Первый уровень адреса
  4. $addr[1]; // Второй уровень адреса, и т.д.

(Добавление)
На мой взгляд, удобнее контролировать полученные данные.
К тому же, позволяет использовать кириллицу.

И ещё,
Если страница ни в UTF-8, то надо будет использовать

(Отредактировано автором: 27 Апреля, 2012 - 01:46:26)

 
 Top
sc2r2bey
Отправлено: 27 Апреля, 2012 - 01:46:06
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




armancho7777777 пишет:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]
вот этого будет достаточно?
а зачем urlencode?
у вас есть и три уровня, кстати какие критерии к каждому уровню?
и после explode еще будет 2 пустых элемента в массиве первый и псоледний

(Отредактировано автором: 27 Апреля, 2012 - 01:48:27)

 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB