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 :: Убрать из строки "index.php/"

 PHP.SU

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


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

> Без описания
Vinyl
Отправлено: 23 Апреля, 2013 - 11:17:20
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


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




Всех приветствую.
Я тут рядом не дождался ответа, спрошу тут =)

Нужно написать регулярочку, чтобы вырезать из URI "index.php/".
Например, набираем "http://php.su/index.php/main/index", а нас редиректит на "http://php.su/main/index". С регулярками я особо не в друзьях, но кое-что составил:
CODE (htaccess):
скопировать код в буфер обмена
  1. RewriteEngine On
  2. RewriteBase /
  3.  
  4. //если URI подходит под шаблон
  5. RewriteCond %{REQUEST_URI} ^\/index\.php\/.*$
  6.  
  7. //переадресовываем.
  8. RewriteRule ^index\.php\/(.*)$ /$1 [NS,R=301,L]
  9.  
  10.  
  11.  
  12. //все, что ниже, нужно CodeIgniter'у
  13. RewriteCond %{REQUEST_FILENAME} !-f
  14. RewriteCond %{REQUEST_FILENAME} !-d
  15. RewriteRule ^(.*)$ index.php/$1 [L]
  16.  



Не работает.
RewriteRule ^index\.php - так бесконечный цикл,
RewriteRule ^\/index\.php - так не срабатывает на index.php

Пробовал в RewriteRule и с [NS] и без него.

rewrite_log (Отобразить)


Насколько я понимаю, апач к переадресованному запросу /main/index применяет правило RewriteRule ^(.*)$ index.php/$1 [L], после чего применяет моё правило, о чем свидетельствует строка RewriteCond: input='/index.php/main/index' pattern='^\/index\.php\/.*$' => matched, хотя он этого делать не должен, т.к. стоит флаг last.

В общем, вторые сутки кипит мой мозг, товарищи.
Где я накосячил? Спасибо заранее.


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DelphinPRO
Отправлено: 23 Апреля, 2013 - 11:27:31
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




вариант разбора урла самим движком и при наличии в нем index.php - редиректить с 301 кодом - не вариант?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Vinyl
Отправлено: 23 Апреля, 2013 - 11:53:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


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




Хотелось бы через mod_rewrite.


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DelphinPRO
Отправлено: 23 Апреля, 2013 - 11:59:22
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




мне бы тоже Улыбка
но я решал такую же проблему так как описывал выше )

не знаю, ведь если подумать, то мы все запросы редиректим на index.php. Правильно? Правильно. А если мы и с index.php будем редиректить на index.php, то получим замкнутый круг. Правильно? Правильно. Наверное.
Выходит задача мод-реврайтом нерешаемая...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Vinyl
Отправлено: 23 Апреля, 2013 - 12:00:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


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




Все, решил! Вдруг кому пригодится:
CODE (htaccess):
скопировать код в буфер обмена
  1. RewriteEngine On
  2. RewriteBase /
  3.  
  4. RewriteCond %{REQUEST_URI} ^\/index\.php\/.*$
  5. RewriteRule ^index\.php\/(.*)$ /$1 [NS,R=301,L]
  6.  
  7. RewriteCond %{REQUEST_FILENAME} !-f
  8. RewriteCond %{REQUEST_FILENAME} !-d
  9. RewriteRule ^(.*)$ index.php?/$1 [L]
  10.  

Разница в RewriteRule ^(.*)$ index.php?/$1 [L]


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DelphinPRO
Отправлено: 23 Апреля, 2013 - 12:04:01
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




про нерешаемую задачу, я конечно же имел ввиду переадресацию адреса

site.ru/index.php на site.ru

с убиранием index.php из дргих адресов, прекрасно справляется стандартный код-игнайтеровский файлик
(Добавление)
Vinyl пишет:
Разница в RewriteRule ^(.*)$ index.php?/$1 [L]

а чем суть? не понимаю, что означает этот вопросик. как оно работает?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Vinyl
Отправлено: 23 Апреля, 2013 - 12:16:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


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




DelphinPRO пишет:
не понимаю, что означает этот вопросик


Я так понимаю, для самого движка нет разницы, есть вопр. знак, или нет, REQUEST_URI в обоих случаях одинакова, а вот под регулярку ^\/index\.php\/.*$ такая строка уже не попадает, поэтому редирект происходит один раз, а не бесконечно. Но это лишь мои предположения, а я так счастлив, что проверять их совсем нет желания Пляшу от радости


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DelphinPRO
Отправлено: 23 Апреля, 2013 - 12:19:19
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




попробую вечером )


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
esterio
Отправлено: 23 Апреля, 2013 - 12:19:56
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Я такие вещи люблю делать так
CODE (htaccess):
скопировать код в буфер обмена
  1. RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Есть одно но - не можна пользоватся GET параметром route.

(Отредактировано автором: 23 Апреля, 2013 - 12:34:28)

 
 Top
DelphinPRO
Отправлено: 23 Апреля, 2013 - 12:22:36
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




А! вот теперь, я понял! это ж строка запроса прибавляется к index.php
получается другой адрес, цикличности нет.
а я пару месяцев страдал проблемой. да уж..


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Vinyl
Отправлено: 23 Апреля, 2013 - 12:22:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


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




esterio пишет:
Я такие вещу люблю делать так

Я тут не указал, забыл: используется CodeIgniter, посему ?route=$1 не подойдет.


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
esterio
Отправлено: 23 Апреля, 2013 - 12:26:05
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




жаль, из всего что я пробовал - ето лучше решение.

(Отредактировано автором: 23 Апреля, 2013 - 12:35:12)

 
 Top
Vinyl
Отправлено: 23 Апреля, 2013 - 12:31:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


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




Вообще, странно, что этот момент не учтен на уровне фреймворка.
Если изначально не применять правил .htaccess, кроме тех, что нужны для работы ЧПУ, то по умолчанию по следующим адресам открывается одна и та же страница:

http://myhost[dot]com/
http://myhost[dot]com/index.php
http://myhost[dot]com/index.php/
http://myhost[dot]com/index.php/welcome
http://myhost[dot]com/index.php/welcome/
http://myhost[dot]com/index.php/welcome/index
http://myhost[dot]com/index.php/welcome/index/
http://myhost[dot]com/welcome
http://myhost[dot]com/welcome/
http://myhost[dot]com/welcome/index
http://myhost[dot]com/welcome/index/

По-моему, это перебор) Хотя, на то он, наверное, и фреймворк.

________________________________ __________________

Не одно, так другое. Пытаюсь убрать www:
CODE (htaccess):
скопировать код в буфер обмена
  1.  
  2. RewriteCond %{HTTP_HOST} ^www\..*$
  3. RewriteRule ^www\.(.*)$ http://$1 [R=301,L]


rewrite_log (Отобразить)


Судя по логу, в HTTP_HOST вообще ничего не попадает. В чем может быть проблема?

P.S. Я знаю, что надо http://$1/%{REQUEST_URI}, пока не так важно. И HTTP_HOST с явным указанием адреса хоста (т.е., !^host.com) не интересно.

(Отредактировано автором: 23 Апреля, 2013 - 13:31:08)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB