Как добавить / игнорировать подпапку в файле htaccess?

Я создал приложение по адресу http: // url / sdf19 /

У меня есть .htaccess, помещенный в / sdf19 /, содержащий RewriteRule для чистых URL-адресов.

Но я создал инструмент для создания PDF-файлов, который находится в подпапке / inc / tools . Мне нужно напрямую связать его для запуска перед заголовками.

Несмотря на несколько часов поиска, попыток использования фрагментов, генераторов и т. Д., Я не могу получить ни один запрос на http: // url / sdf19 / inc / tools , который должен быть разрешен, без использования существующего набора RewriteRule over

Вот мой начальный файл

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-z]+)\/?$ index.php?page=$1 [NC]
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&id=$2 [NC]
RewriteRule ^([a-z]+)\/([a-z]+)\/?$ index.php?page=$1&action=$2 [NC]
RewriteRule ^([a-z]+)\/([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&action=$2&id=$3 [NC]

THINGS TRIED:

Я попытался добавить это в строку 4; RewriteCond% {REQUEST_URI}! ^ inc / tools / [NC ] Это дало RewriteCond: ошибку строки неверного аргумента

Я попытался добавить это в строку 2;

RewriteCond %{REQUEST_URI} ^/inc/tools/(.*)$
RewriteRule ^.*$ - [L]

Я попытался добавить .htaccess в / inc / tools с выключенным RewriteEngine не работало.

Я пробовал использовать тестер .htaccess, указанный в верхнем посте, но хотя мой файл (см. Выше) работает в реале, он выдает «правило не соблюдается» для всего, что там есть!

TL; DR

Желаемый результат заключается в том, что я могу разрешить прямой доступ к http: // url / sdf19 / inc / tools > всему, что я пробовал до сих пор, меня перенаправляют на базу http: // url / sdf19 /

4
задан 19 May 2019 в 18:20
2 ответа

Smá umræða um núverandi reglur þínar ...

Ég hef reynt að bæta þessu við á línu 4; RewriteCond% {REQUEST_URI}! ^ Inc / tools / [NC] Þetta gaf RewriteCond: slæm rökvillulaga

Vegna þess að þú hefur rangt rými í miðju CondPattern ! ^ Inc / tools / . Þessi tjáning gefur samt ekki rétta niðurstöðu (sjá hér að neðan).

Ég hef reynt að bæta þessu við línu 2;

 RewriteCond% {REQUEST_URI} ^ / inc / tools /(.*)$
Umritunarregla ^. * $ - [L]
 

Þú ert nálægt þessu. Hins vegar inniheldur REQUEST_URI netþjónabreytan alla URL-slóðina, ekki URL-slóðina miðað við þar sem .htaccess skráin er staðsett. Þannig að þetta þyrfti að vera af forminu:

RewriteCond %{REQUEST_URI} ^/sdf19/inc/tools/
RewriteRule ^ - [L]

Þetta þyrfti að fara nálægt toppnum á .htaccess skránni þinni, strax eftir RewriteEngine On tilskipunina. (. *) $ í lok CondPattern var óþarfi, sem og RewriteRule mynstur ^. * $ . Hins vegar er hægt að skrifa þetta á skilvirkari hátt sem ein tilskipun og prófa með RewriteRule mynstri í staðinn. Þú getur síðan sleppt / sdf19 undirmöppunni. Til dæmis:

RewriteRule ^inc/tools/ - [L]

Ég hef prófað að bæta við .htaccess í / inc / tool s með RewriteEngine OFF , virkaði ekki.

Jæja, að hefði átt að virka. (Nema kannski að þú hafir mod_alias tilskipanir í foreldra .htaccess skránni sem stangast á?) Svo, það er óljóst, miðað við það sem þú hefur lýst í spurningunni af hverju það gerði það ekki. Ertu með aðrar tilskipanir í .htaccess skránni þinni?

öllu sem ég hef reynt hingað til fæ ég mér vísað til grunn http: // url / sdf19 /

Það er líka skrýtið, vegna þess að ekkert sem þú hefur sýnt hingað til myndi leiða til ytri tilvísunar. Ertu með aðrar tilskipanir í .htaccess skránni þinni? Mod_alias tilvísun eða RedirectMatch tilskipun kannski?

 RewriteCond% {REQUEST_FILENAME}! -F
Skrifaðu aftur% {REQUEST_FILENAME}! -D

RewriteRule ^ ([a-z] +) \ /? $ Index.php? Page = $ 1 [NC]
RewriteRule ^ ([a-z] +) \ / ([0-9] +) \ /? $ Index.php? Page = $ 1 & id = $ 2 [NC]
RewriteRule ^ ([a-z] +) \ / ([a-z] +) \ /? $ Index.php? Page = $ 1 & action = $ 2 [NC]
RewriteRule ^ ([a-z] +) \ / ([a-z] +) \ / [[0-9] +) \ /? $ Index.php? Page = $ 1 & action = $ 2 & id = $ 3 [NC]
 

hugsanlegt vandamál með þessar tilskipanir er að RewriteCond tilskipanir eiga aðeins við um fyrstu RewriteRule sem fylgir. Svo, 2., 3. og 4. RewriteRule tilskipunin hér að ofan er framkvæmd án skilyrða og skýrir hvers vegna beiðnir um / sdf19 / inc / tools eru teknar af þeim þriðja

Þú þarft annaðhvort að hafa sömu skilyrði fyrir í hverri RewriteRule (þ.e. reglan er aðeins afgreidd þegar beiðnin er ekki kortlögð í skrá og er ekki kortlögð í skráasafn ). Eða hafið merkingu þeirra og komið í veg fyrir frekari vinnslu ef beðið er um skrá eða skrá - þetta getur þó farið eftir því hvort síðar eru fleiri tilskipanir í skránni sem enn þarf að vinna úr við þessar aðstæður.

Þú vantar líka L fánar í þessum tilskipunum, þannig að vinnsla heldur (að óþörfu?) Áfram í gegnum skjalið þitt.

Svo reyndu eftirfarandi í staðinn:

# Prevent further processing if a file or directory is requested
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Route other URLs
RewriteRule ^([a-z]+)\/?$ index.php?page=$1 [NC,L]
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&id=$2 [NC,L]
RewriteRule ^([a-z]+)\/([a-z]+)\/?$ index.php?page=$1&action=$2 [NC,L]
RewriteRule ^([a-z]+)\/([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&action=$2&id=$3 [NC,L]
2
ответ дан 3 December 2019 в 03:53

Вы пробовали добавить "RewriteEngine On" в свой файл конфигурации?

run_rewritemap_programs(server_rec *s , apr_pool_t *p){
if (conf->state == ENGINE_DISABLED) { // usage of "RewriteEngine"
  return APR_SUCCESS; // early return
rewritemap_program(...); // usage of "RewriteRule" 
}

Поскольку по умолчанию для "RewriteEngine" установлено значение "Off", из фрагмента кода выше, "RewriteRule" включен только если в файле конфигурации явно указано «RewriteEngine On».

Еще одна вещь, о которой стоит упомянуть, это то, что по умолчанию для параметра «RewriteEngine» установлено значение «Выкл.», поэтому установка «RewriteEngine Off» сама по себе является скрытой ошибкой неправильной настройки, поскольку она не влияет на поведение системы.

0
ответ дан 23 February 2021 в 23:59

Теги

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