.htaccess remove php file extension not working only on heroku

So I have the below code in my .htaccess file in my local apache XAMPP server in the root directory and it works 100% correctly. However, when I try to deploy to Heroku it does not work. I have tried slightly modified versions of this found on the internet to perform the same thing, but none of them seem to work. This is supposed to remove .php file extensions and allow things like /api/products/all where the file api.php exists and the products/all are just read in with PHP $_SERVER['PATH_INFO'] and output is returned based on what they are.

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

I don't know a ton about .htaccess so any help would be appreciated.

2
задан 11 August 2017 в 03:40
1 ответ

၎င်းသည် .php ဖိုင် extension များကိုဖယ်ရှားပစ်ရန်

ကောင်းပြီ, တင်းကျပ်စွာပြောရလျှင်, ဒီကုဒ် .php ထည့်သွင်းဖို့ရည်ရွယ်သည်။ ] နောက်တဖန်ဖိုင် extension ကို (URL ကိုလမ်းကြောင်းနိုင်ရန်အတွက်) ။ (သင် / api / products / all အတွက်တောင်းဆိုမှုပြုလုပ်ခြင်းဖြင့်၎င်းကို "သင်ဖယ်ရှားပြီး" ဖြစ်သည်။ )

သို့သော်၊ ဤကုဒ်သည်သင်ပြုလုပ်နေသည်ထင်သည်အတိုင်းမလုပ်ဆောင်ပါ။ MultiViews လိုင်း (mod_negotiation ၏အစိတ်အပိုင်း) ကြောင့်ဤအရာသည်သင်၏ local server ပေါ်တွင်သာအလုပ်လုပ်ခြင်းဖြစ်သည်။ အောက်တွင်ဖော်ပြထားသော mod_rewrite ကုဒ်သည်လုံးဝဘာမှမလုပ်ပါ။ ထို့ကြောင့် Heroku တွင်သင့်အတွက်ဤအရာသည်အလုပ်မလုပ်ခြင်းဖြစ်နိုင်သည်။

mod_rewrite ညွှန်ကြားချက်များလည်ပတ်ခွင့်ပြုခဲ့လျှင် (ဆိုလိုသည်မှာ - အကယ်၍ [၁၁၃၆၉၆၂] MultiViews ဖြစ်ခဲ့လျှင် ] /api/products/all.php သို့ သို့ /api/products/all.php သို့ သွား၍ ဤဥပမာတွင်မမှန်ကန်ပါက] ပိတ်ထားသည်။ ) သို့ဖြစ်လျှင်ဤသည် / api / ထုတ်ကုန် / အားလုံး /api/products/all.php သို့တောင်းဆိုမှုကိုပြန်လည်ရေးလိမ့်မည်။

အခြားမည်သည့် URL အမျိုးအစားများကိုသင်ကိုင်တွယ်ရန်ကြိုးစားနေသည်ကိုကျွန်ုပ်မသိပါ၊ သို့သော်ပုံစံတစ်ခု၏ URL ကိုအထူးသဖြင့်လမ်းကြောင်း / api / products / all သို့ /api.php/products/ mod_rewrite ကို အသုံးပြု၍ အားလုံးသည်သင်အစားအောက်ဖော်ပြပါတစ်ခုခုလိုအပ်လိမ့်မည်။

RewriteEngine On
RewriteRule ^(api)/(.+) $1.php/$2 [L]

သင်သတ်မှတ်ထားသော URL နှင့်သာကိုက်ညီမှသာလျှင် RewriteCond ညွှန်ကြားချက်များမလိုအပ်တော့ပါ။နှင့် "ထုတ်ကုန် / အားလုံး" ကို php

ဖြင့်ဖတ်ပြီးပြီဖြစ်သည်။ ၎င်းကိုအပို pathname information ဟုခေါ်ပြီး server မှစီမံခန့်ခွဲသည် / စုဆောင်းပြီး PHP သို့ PATH_INFO element တွင် $ _ SERVER superglobal ၏။ လမ်းကြောင်းအချက်အလက်ကိုလုံးဝခွင့်ပြုခြင်းသည်ဆာဗာပေါ်တွင်မူတည်သည်။ (အကယ်၍ မဟုတ်ပါက ၄ င်း URLs များသည် ၄၀၄ ရလဒ်ထွက်ပေါ်လာမည်။ )

UPDATE # 1:

... အကယ်၍ ကျွန်ုပ်သည်ဥပမာ.js.phpကဲ့သို့သောဖိုင်များရှိလျှင် (ကျွန်ုပ် php ကုဒ်သုံးသော်လည် Javascript ကဲ့သို့ပြန်ဆိုပါက) ပြန်လည်ပြင်ဆင်ရန်စည်းမျဉ်းကိုမည်သို့ပြုပြင်ရမည်နည်း။ သူတို့၏ .php ကိုဖယ်ရှားရန်ဥပမာ example.js မှတစ်ဆင့်ကြည့်ရှုရန်လိုသည်။

သင်သည်အောက်ပါကဲ့သို့ထပ်ဆောင်းစည်းမျဉ်းစည်းကမ်းကိုထပ်ထည့်နိုင်သည်။

RewriteCond %{DOCUMENT_ROOT}/$1.$2.php -f
RewriteRule (.+)\.(js)$ $1.$2.php [L]

၎င်းသည်တောင်းဆိုမှုများအားလုံးကိုကြားဖြတ်သည် .js အတွက် ဖိုင်များနှင့်သက်ဆိုင်ပါကသက်ဆိုင်ရာ .js.php ဖိုင်ကိုတောင်းခံပါလိမ့်မည်။

တနည်းအားဖြင့်သင်သည် RewriteCond ညွှန်ကြားချက်ကိုသတ်မှတ်နိုင်သည်။ ဒီ:

RewriteCond %{REQUEST_FILENAME}.php -f

အကယ်၍ သင်၏ .js ဖိုင်များကို / api / စတင်သော URL-path အောက်တွင်တည်ရှိပါက သို့မတိုင်မီ မတိုင်မီ ကိုသွားရန်လိုအပ်သည်ကိုသတိပြုပါ။ ] ပaိပက္ခကိုရှောင်ရှားရန်သင်၏ api ခေါ်ဆိုမှုများကိုလမ်းကြောင်းပေးသောအထက်ပါစည်းမျဉ်း။

UPDATE # 2: ဤအရင်းအမြစ်များအတွက်မှန်ကန်သော mime-type ကိုလည်းသင်လိုအပ်သည်။ (အမှားမှားသည့် MIME အမျိုးအစားနှင့်အလုပ်လုပ်သည်ဖြစ်စေ browser သည်မူတည်သည်။ ) .js URL ကို PHP script တစ်ခုအတွင်းအတွင်းပြန်လည်ရေးသားခြင်း (ဥပမာ။ .js.php ) Apache သည်သဘာဝအားဖြင့် text / html mime-type (PHP ဖိုင်များအားလုံးအတွက်ပုံမှန်အားဖြင့်) နှင့်အတူဤအရာကိုလုပ်ဆောင်လိမ့်မည်။ သင်သည်သင်၏ script အတွင်းမှမှန်ကန်သော ပါဝင်သည့်အကြောင်းအရာအမျိုးအစား ခေါင်းစီးကိုတိတိကျကျသတ်မှတ်ထားကြောင်းသေချာစေနိုင်သည် (သို့) .htaccess Header ညွှန်ကြားချက် (mod_headers) တွင်သတ်မှတ်နိုင်သည်။ ) ။ ဥပမာအားဖြင့် -

<FilesMatch "\.js.php$">
    Header set Content-Type "application/javascript; charset=UTF-8"
</FilesMatch>

၎င်းသည် Apache 2.2.12+ ပေါ်တွင်သာအလုပ်လုပ်နိုင်ကြောင်းသတိပြုပါ (ဤဗားရှင်းမတိုင်မီ Content-Type header ကို Header ဖြင့်သတ်မှတ်ရန်မဖြစ်နိုင်ပါ

သတိပြုရန်မှာ RewriteRule ပေါ်ရှိ T R အလံကိုအသုံးပြုပြီး mime-type ကိုသတ်မှတ်ရန် "ရိုးရှင်းသော" နည်းလမ်းသည်လမ်းညွှန်တစ်ခုအတွက် / .htaccess အခြေအနေ - ပြန်လည်ရေးခြင်းလုပ်ငန်းစဉ်ကိုစတင်သည့်အခါ၎င်းသည် ထပ်၍ ရေးကူးခံရသည်။

1
ответ дан 3 December 2019 в 12:35

Теги

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