public_html के अलावा किसी folder से publish करना
Default रूप से एक domain आपकी home directory में public_html publish करता है। आधुनिक
PHP frameworks उल्टे तरीके से बने होते हैं: application एक folder में रहती है और उसके
भीतर केवल एक public/ subfolder ही web से पहुँच योग्य होने के लिए होता है।
.env file — database password, application key, payment credentials —
जानबूझकर एक स्तर ऊपर बैठती है।
अगर आप इसके बजाय पूरा project publish करते हैं, तो /.env एक ऐसा URL है जिसे कोई भी
request कर सकता है। document root चुनना ही वह तरीका है जिससे आप इससे बचते हैं।
इसे सेट करें
Domains → domain का row → Document root।
आपसे आपकी home directory के भीतर एक folder पूछा जाता है, जो इसके सापेक्ष लिखा जाता है:
app/public
न कि /home/you/app/public। public_html पर वापस जाने के लिए इसे खाली छोड़ दें।
अगर folder अभी मौजूद नहीं है तो पैनल उसे बनाता है, web server configuration दोबारा लिखता है और उसे reload करता है। जब यह पूरा हो जाता है तो यह आपको वह पूरा path बताता है जिसे अब publish कर रहा है, और अगर उसे folder बनाना पड़ा तो स्पष्ट रूप से ऐसा कहता है।
बाद में एक विशिष्ट layout:
/home/you/
├── app/ <- the whole project: composer.json, .env, vendor/
│ └── public/ <- the only part served to the web
└── public_html/ <- the default, no longer used
जाँचें कि यह काम कर गया
साइट load करें। फिर उस file के लिए request करें जिसे आप सुरक्षित रख रहे थे:
curl -sI https://yourdomain.com/.env
403 वही जवाब है जो आप चाहते हैं। 200 का मतलब है कि document root अब भी
.env के ऊपर है और बदलाव लागू नहीं हुआ — Domains page reload करें और पुष्टि करें कि
row में वही folder दिख रहा है जो आपने टाइप किया।
किन domains के पास यह है
- Primary domain, addon domains और subdomains हर एक का अपना document root और अपना Document root बटन है।
- Parked (alias) domains के पास नहीं। एक alias हमेशा आपकी primary website serve करता है, यही उसे alias बनाता है। पैनल ऐसा कहता है: "A parked domain always serves your primary website. Change the primary document root instead, or convert this to an addon domain."
- Redirects के पास नहीं। एक redirect अपना कुछ भी serve नहीं करता।
पैनल क्या मना करता है, और क्यों
value को किसी privileged चीज़ तक पहुँचने से पहले जाँचा जाता है, और दूसरी ओर दोबारा जाँचा जाता है। मना करने की सूचना पेज पर एक message के रूप में लौटती है, और कुछ भी बदला नहीं जाता।
| आपने टाइप किया | इसे क्यों मना किया गया |
|---|---|
/var/www/html, ~/app |
यह आपकी home के सापेक्ष होना चाहिए। Absolute paths और ~ स्वीकार नहीं किए जाते। |
../../etc, app/../.. |
किसी folder का नाम dot से शुरू नहीं हो सकता, यही बात .. को असंभव बनाती है। बनावट से ही आपकी home के बाहर कुछ भी पहुँच योग्य नहीं है। |
.ssh, .git, .config |
वही नियम। .ssh publish करने से आपकी keys web पर आ जातीं; .git publish करने से आपका source history वहाँ आ जाता। |
tmp |
आपकी PHP session files वहाँ रहती हैं। इसे publish करने का मतलब है अपने visitors के sessions publish करना। |
logs, etc, mail, ssl, backups |
आपके account के लिए पैनल द्वारा उपयोग किए जाते हैं। |
a/b/c/d/e |
ज़्यादा-से-ज़्यादा चार स्तर गहरा। |
| 128 अक्षरों से अधिक कुछ भी | बहुत लंबा। |
सर्वर पर ही एक और जाँच होती है: folder को किसी भी symbolic links के ज़रिए resolve
करके दोबारा जाँचा जाता है। आपकी home से बाहर point करने वाला एक symlink follow करने
के बजाय मना कर दिया जाता है, तो ln -s / ~/app एक served filesystem में नहीं बदलता।
प्रमाणपत्र
कुछ नहीं करना। एक certificate domain के लिए जारी होता है, folder के लिए नहीं, और आपके सेट किए document root को certificate लिखे जाने के क्षण पर दोबारा पढ़ा जाता है — तो HTTPS सेट होने के दौरान इसे बदलना सुरक्षित है। जिस addon domain के पास पहले से HTTPS है वह उसे बनाए रखता है।
जब कुछ ग़लत दिखे
साइट एक directory listing या "index of /" दिखाती है। नए folder में अभी कोई
index.php या index.html नहीं है। application upload करें, या document root को उस
folder पर point करें जिसमें एक है।
हर पेज पर 403, केवल .env पर नहीं। folder मौजूद है पर web server उसमें पढ़ नहीं
सकता। File Manager से जाँचें कि folder और उसके parents आपके account के हैं, ख़ासकर अगर
आपने files वहाँ SSH के ज़रिए किसी दूसरे user के रूप में रखी थीं।
हर पेज पर 404 और एक मिनट पहले साइट काम कर रही थी। Domains page reload करें और row
में दिखा folder पढ़ें। एक टाइपो ठीक वैसे ही publish होता है जैसे टाइप किया गया — पैनल
अनुमान लगाने के बजाय folder बनाता है, तो एक खाली नया folder आम वजह है। इसे वापस
public_html पर, या सही folder पर सेट करें।
हर पेज missing key के बारे में एक framework error के साथ 500 लौटाता है। वह
application है, document root नहीं — framework तक पहुँचा जा रहा है। Laravel के लिए यह
आमतौर पर एक खाली APP_KEY होता है।