Проблем при ползването на $PATH_INFO

8 отговора 163 прегледа
#1

Проблем при ползването на $PATH_INFO

Здравейте,
Имам система с уеб интерфейс, където на един главен модул се подават параметри кой под-модул да зареди и други параметри. В момента примерно урл изглежда така:

engine.php?module=module1&action=add&foo1=1..... и т.н.

Искам да променя начина на подаване на параметри и да изглежда горе-долу така:

domain.com/engine.php/module1/add/?foo1=1

или дори така:

domain.com/engine/module1/add/?foo1=1

До тук всичко е ясно и няма проблеми. Проблемът е, че и в двата случая се прееб@в@ тотално страницата, защото се губи истинския път до картинки, .js, .css и т.н.
Как точно трябва да се настрой apache-то, за да редиректва правилно. Нямам достъп до httpd.conf и вариант остава само чрез .htaccess с RewriteRule. Но как точно трябва да се направи идея си нямам - апаче-то не ми е силна страна :) . Има ли възможност без rewrite да се направи? Рових се в гугъл, намерих разни туториали, но общо взето нищо не разбрах - написани са от администратори за администратори :).

Отговор
в отговор на genn #2

Re: Проблем при ползването на $PATH_INFO

В началото на .htaccess файла сложи този ред:

RewriteCond %{REQUEST_URI} !\.(gif|jpg|php|pl|swf|css|txt)$

Всички файлове, с посочените разширения, няма да бъдат засегнати от mod_rewrite при тяхното извикване.

Отговор
в отговор на $burov #3

Re: Проблем при ползването на $PATH_INFO

тука не става въпрос за mod_rewrite - мой сайт работи по същата схема (с PATH_INFO)- имам един скрипт който чете всички параметри след името си и оттам си взема например името на страницата, която трябва да зареди, например:

[линк]

се разшифрова като:
language=en
page_alias=contacts
continent=asia
и би било еквивалентно на

[линк]

това всичко става без mod_rewrite, а и допълнително съм си написал една бибилиотечка, която да ми взема параметрите след УРЛ-то - мога да си дефинирам параметри по подразбиране (без да изколзвам двойки ключ-стойност), както в случая е езика и името на страницата; както и да имам нормални двойки ключ-стойност, както е в случая с континента

ся по въпроса - ако имаш достъп до сървъра, най-добре ще е да си нашравиш alias към директорията с картинките, така винаги [линк] ще ти сочи едно и също място, другия вариант е сам да си парсваш УРЛ-то и да определяш динамично (и релативно) пътя към директорията с картинките.

Just a genius

Отговор
в отговор на $burov #4

Re: Проблем при ползването на $PATH_INFO

Благодаря за бързия отговор ;)

Пробвах го, но не става.
.htaccess-а ми е:

RewriteCond %{REQUEST_URI} !\.(gif|jpg|php|pl|swf|css|txt)$

<FILES test>
ForceType application/x-httpd-php
</FILES>


пробвам [линк]

и няма проблеми.
Ако напиша обаче

[линк]

се прецаква всичко. Правя explode на $PATH_INFO и е ок, но всичко, което се зарежда допълнително, липсва.

Отговор
в отговор на Blake #5

Re: Проблем при ползването на $PATH_INFO

Нямам достъп до сървъра :(.
Това с динамичното генериране на пътя е в доста краен случай, защото имам готови вече хиляда хтмл шаблона, и е дооооста работа да редактирам всеки един от тях, така че да слагам динамично пътя до картинката.

Отговор
в отговор на genn #6

Re: Проблем при ползването на $PATH_INFO

хех, доста интересно - използваш динамичен скриптов език, а имаш статични 1000+ шаблона??? мисля, че ВСЕ ПАК ще е по-добре да ги оптимизираш тия неща - просто си направи една функцийка дето според зависи (къде се намираш) ти връща УРЛ на картинката, и си готов...

А и нещо не ми се връзва - използването на PATH_INFO и подобми техники обикновено се налага когато имаш нещо като CMS, който през 1/2/краен (малък) брой скриптове, ти дисплейва целия сайт... ако всичко ще ти е на 1000-ди файлчета разположени в разни директорийки, къф е смисъла???

Ще запиташ какво имам предвид ли? ами да речем, че енгине.пхп ти изкарва 183-тия темплейт - (т.е. инклудва го някъде си) - то тогава пътят на картинките се определя спрямо това къде се намира енгине.пхп, който очевидно си е на едно и също място винаги... така, че картинките (т.е. пътят до тях) също би трябвало да е един и същ. Или нещо бъркам???

Just a genius

Отговор
в отговор на Blake #7

Re: Проблем при ползването на $PATH_INFO

Целият ти пост е опит за заяждане, но да ти отговоря все пак...

Естествено, че шаблоните ще са статични...нали това им е ролята - да съдържа хтмл кодът, който НЕ е динамичен и таговете, които съм си дефинирал, съответно парсвам шаблона и замествам тага с определена стойност. И е нормално да имам дори 100000 шаблона.... щом са толкова, значи не може с по-малко - просто имам много различни страници, където даже и еднакъв хедър/фуутър не може да се сложи. И мога мноооого лесно в шаблоните да сложа пред всяка картинка един таг <img src="{REAL_PATH}/imgs/img.gif> - това е най-лесно, но си мисля, че трябва да има по-интЕлегенто решение и както казах, това е в краен случай.

Изобщо не си прочел дори какво съм написал - искам да ползвам PATH_INFO, защото имам ЕДИН енджин, който "дисплейва" целия сайт. По-просто да го кажа - скриптът е един, той инклудва нужния под-скрипт( които също не са много - в момента са 10 различни модула ), който пък модул сам по себе си нищо няма да може да свърши, защото енджина се грижи за абсолютно всичко - от сесии, връзка с DB, та чак до error handling и т.н.

А за пътя за картинките - естествено, че пътя до картинките ще бъде релатив до директорията, където е енджина, но я ми кажи като напиша нещо от рода:

engine/module1/action1/id/?foo1=blah

Според теб пътят един и същ ли е?

-Айде със здраве

Отговор
в отговор на genn #8

Re: Проблем при ползването на $PATH_INFO

Интересно, що реши че се заяждам обаче... Явно не мога да се изразявам като хората, затова ще бъда лаконичен - поразгледай $_SERVER масива, и си вземи това, което ти трябва - само за сведение, при мене пътя:

[линк]

се отразява съответно в:

[SCRIPT_FILENAME] => /website/www/int/index.php
[REQUEST_URI] => /int/index/en/backup?id=18
[SCRIPT_NAME] => /int/index
[PATH_INFO] => /en/backup
[PATH_TRANSLATED] => /website/www/en/backup
[PHP_SELF] => /int/index/en/backup
[argv] => Array ( [0] => id=18 )

Скриптът, който обработва всичко е index.php (викам го като "index" само), и както виждаш, го има черно на бяло в $_SERVER['SCRIPT_NAME']. Оттам малко стрингови операции, и ще си получиш това, което ти трябва...

А особено пък ако енджина е само един, тогава със сигурност знаеш докъде се "простира" в УРЛ-то и лесно можеш да отсееш зърното от плявата...

Мислим дека тва да е най-Ентелигентното решение в случай като твоя...

Just a genius

Отговор
в отговор на Blake #9

Re: Проблем при ползването на $PATH_INFO

Проблемът не е във взимането на параметрите, а в променянето на пътя => страницата се прецаква тотално.
Искам апаче-то да го прави - може да се направи, защото гледах един туториал точно за подобно редиректване, само че както казах нищо не отбирам от конфигурирането му и тепърва трябва да чета за rewrite-ването му.
Аз да се занимавам да парсвам, па да определям къде се намирам, па да сетвам динамично пътя в шаблоните ... просто е напълно излишна работа и сървърно време и ресурси :). С три реда може да кажеш на апачето да го прави...

ПП Ами тонът ти ми се стори леко заядлив...по друго няма какво да реша, че се заяждаш... сори, ако не е така

Отговор