Programim dhe zhvillim, javascript, python, php, html

Apache mod_rewrite REQUEST_URI nuk përputhet me modelin

Apache 2.4 në CentOS 7, në një server të largët cPanel/WHM.

Unë dua të marr përgjigjen 404 të serverit Apache kur një skedar .jpg nuk gjendet, në vend të Rishkrimit në index.php që ngarkon të gjithë aplikacionin e uebit.

Duke u përpjekur për ta bërë këtë në .htaccess.

#Trying to exclude jpegs:
RewriteCond %{REQUEST_URI} !\.jpg$
#And exclude these folders:
RewriteCond %{REQUEST_URI} !^/(folder1|folder2)/
#And rewrite everything else (commenting this results in regular Apache 404 responses for missing image files):
RewriteRule .* index.php [L]

Kur përpiqem të ngarkoj këto URL që rezultojnë në 404, example.com/asdf.jpg, ose example.com/folder1/abc.css, RewriteRule ende hyn në fuqi, ato rishkruhen në index.php dhe faqja CMS 404 ngarkohet.

Kur komentoj RewriteRule, atëherë ato dy url rezultojnë në përgjigjen e lehtë Apache 404 në vend të përgjigjes CMS 404.

Plotësoni seksionin mod_rewrite.htaccess:

<IfModule mod_rewrite.c>
############################################
## enable rewrites

    Options +FollowSymLinks
    RewriteEngine on

        RewriteBase /


    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(folder1|folder2)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
## test excluding .jpg from rewrite
    RewriteCond %{REQUEST_URI} !(\.jpg)$

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

</IfModule>

Edit - këtu është konfigurimi VirtualHost:

<VirtualHost 12.34.56.7:80>
  ServerName site.example.com
  ServerAlias www.site.example.com
  DocumentRoot /home/someuser/public_html
  ServerAdmin [email protected]
  UseCanonicalName Off
  CustomLog /etc/apache2/logs/domlogs/site.example.com combined
  <IfModule log_config_module>
    <IfModule logio_module>
      CustomLog /etc/apache2/logs/domlogs/site.example.com-bytes_log "%{%
s}t %I .\n%{%s}t %O ."
    </IfModule>
  </IfModule>
  ## User someuser # Needed for Cpanel::ApacheConf
  <IfModule userdir_module>
    <IfModule !mpm_itk.c>
      <IfModule !ruid2_module>
        UserDir enabled someuser
      </IfModule>
    </IfModule>
  </IfModule>

  # Enable backwards compatible Server Side Include expression parser for Apache
 versions >= 2.4.
  # To selectively use the newer Apache 2.4 expression parser, disable SSILegacy
ExprParser in
  # the user's .htaccess file.  For more information, please read:
  #    http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilegacyexprparser
  <IfModule include_module>
    <Directory "/home/someuser/public_html">
      SSILegacyExprParser On
    </Directory>
  </IfModule>

  <IfModule suphp_module>
    suPHP_UserGroup someuser someuser
  </IfModule>
  <IfModule suexec_module>
    <IfModule !mod_ruid2.c>
      SuexecUserGroup someuser someuser
    </IfModule>
  </IfModule>
  <IfModule ruid2_module>
    RMode config
    RUidGid someuser someuser
  </IfModule>
  <IfModule mpm_itk.c>
    # For more information on MPM ITK, please read:
    #   http://mpm-itk.sesse.net/
    AssignUserID someuser someuser
  </IfModule>

  <IfModule alias_module>
    ScriptAlias /cgi-bin/ /home/someuser/public_html/cgi-bin/
  </IfModule>

  # To customize this VirtualHost use an include file at the following location
  # Include "/etc/apache2/conf.d/userdata/std/2_4/someuser/csite.example.com/*.conf"
</VirtualHost>

Edit, e rishkruaja trace6. Ai tregon se rregulli .* zbatohet edhe pse folder1 nuk duhet të zbatojë rregullin. E provova këtë në një server testimi të makinës virtuale dhe funksionon atje, por jo në këtë server fizik të largët.

Këtu janë 13 rreshtat e parë të gjurmës:

[Fri Nov 11 02:21:08.389721 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] add path info postfix: /home/someuser/public_html/folder1/catalog/ABC -> /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389764 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg -> folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389775 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] applying pattern '.*' to uri 'folder1/catalog/ABC/10162015/Asdf.jpg', referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389790 2016] [rewrite:trace5] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] setting env variable'HTTP_AUTHORIZATION' to '', referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389802 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] add path info postfix: /home/someuser/public_html/folder1/catalog/ABC -> /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389812 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/folder1/catalog/ABC/10162015/Asdf.jpg -> folder1/catalog/ABC/10162015/Asdf.jpg, referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389821 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] applying pattern '.*' to uri 'folder1/catalog/ABC/10162015/Asdf.jpg', referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389835 2016] [rewrite:trace4] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] RewriteCond: input='/folder1/catalog/ABC/10162015/Asdf.jpg' pattern='!^/(folder1|folder2)/' => not-matched, referer:http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389844 2016] [rewrite:trace1] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f002b310/initial] [perdir /home/someuser/public_html/] pass through /home/someuser/public_html/folder1/catalog/ABC, referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389922 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/404.shtml -> 404.shtml, referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389945 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] [perdir /home/someuser/public_html/] applying pattern '.*' to uri '404.shtml', referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389958 2016] [rewrite:trace5] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] setting env variable 'HTTP_AUTHORIZATION' to '', referer: http://site.example.com/widgets/bathroom/
[Fri Nov 11 02:21:08.389969 2016] [rewrite:trace3] [pid 25637:tid 139651102975744] mod_rewrite.c(477): [client 45.67.87.76:57196] 45.67.87.76 - - [site.example.com/sid#7f031c7731e0][rid#7f02f001bae8/initial/redir#1] [perdir /home/someuser/public_html/] strip per-dir prefix: /home/someuser/public_html/404.shtml -> 404.shtml, referer: http://site.example.com/widgets/bathroom/

  • A ka ndonjë rregull tjetër mbi/poshtë këtyre? 10.11.2016
  • E gjithë gjëja është e mbyllur në një if module për mod_rewrite dhe më pas e vetmja gjë përpara direktivave në pyetjen time lidhet me http/https që nuk duket se do të ndikonte në këtë problem. Më pas nuk ka asgjë. 10.11.2016
  • Rregullat tuaja duken në rregull, dhe madje u përpoqa ta riprodhoja problemin në serverin tim, por gjithçka funksionon siç do të prisnit. Kontrolloni për llojet, ruajtjen e memories së shfletuesit dhe aktivizoni regjistrimin e rishkrimit të gjurmëve. 10.11.2016
  • @anubhava por a nuk duhet që RewriteCond e mëparshme të parandalojë .* të aplikohet në skedarët që dua të përjashtoj? Gjithashtu, a nuk është plotësisht i padobishëm rregulli juaj i rishkrimit, pasi ai thjesht rishkruan index.php në vetvete? ewriteRule !^index\.php$ index.php [L] ???? 10.11.2016
  • @anubhava më vjen keq që humba ! por ende nuk e rregullon problemin. .jpg është ende duke rishkruar në index.php, duke shkaktuar përgjigjen CMS. Gjithashtu, a ka vërtet ndonjë ndryshim midis .* dhe !^index\.php$? Jo shumë, apo jo? Dhe meqenëse çështja është nuk të rishkruash skedarët .jpg (dhe disa të tjerë), ai regex me të vërtetë nuk bën asnjë ndryshim, apo jo? 10.11.2016
  • @DusanBajic Sapo kam postuar seksionin e plotë Rishkruaj të .htaccess tim. Gjithçka duket mirë? 10.11.2016
  • @anubhava jo .htaccess sipër tij, dhe poshtë tij vetëm deny from all për disa drejtori. Ekziston gjithashtu konfigurim në të gjithë sistemin, por nuk do të kishte ndonjë rregull rishkrimi në të. 10.11.2016
  • A mund të ndani konfigurimin e hostit virtual? 10.11.2016
  • Gjithashtu cili është versioni juaj Apache? 10.11.2016
  • @DusanBajic Shtova konfigurimin VirtualHost. @anubhava, është Apache 2.4. 11.11.2016
  • @DusanBajic e provova këtë në një makinë virtuale lokale dhe funksionon. Por jo në serverin fizik të largët. Unë postova 13 nga 115 rreshtat e parë nga gjurma e rishkrimit. A mund të shihni ndonjë të dhënë nga kjo? 11.11.2016

Përgjigjet:


1

Duket sikur rregulli juaj po kap nënkërkesën kur kërkoni ErrorDocument që përputhet. Provoni të shtoni flamurin NS në rregullin tuaj.

10.11.2016
  • E ndryshova rregullin në këtë, por rezultati është i njëjtë si më parë. RewriteRule .* index.php [L,NS] 11.11.2016
  • Nëse nuk keni vendosur ErrorDocuments, Apache mund të marrë një 404 të brendshëm në to, kështu që mund të ndodhë që rregullat tuaja po e kapin atë disi. Ju keni akses në konfigurimin e serverit, kështu që përdor regjistrimintrace8 për të parë se çfarë po ndodh. 11.11.2016
  • Unë postova 13 rreshtat e parë të rreshtit 115 trace6. A mund të tregoni ndonjë gjë nga kjo apo duhet të postoj më shumë prej saj (ose të gjithë)? 11.11.2016
  • .jpg është e parëndësishme për atë URL, ajo fillon me /folder1/, e cila e përjashton atë nga RewriteRule, kështu që ja ku po përpiqet të shkojë. Sigurisht që .* përputhet, do të përputhet me çdo gjë, por kjo nuk do të thotë se rregulli zbatohet, RewriteCondtë e ndalojnë atë. Duket sikur keni diçka diku në folder1 që po bën më shumë rishkrime ose emërtime, ndoshta me flamurin PT siç tregojnë rreshtat 8 dhe 9 të seksionit të regjistrit. 11.11.2016
  • Ideja juaj se mund të kishte një .htaccess brenda /folder1/ ishte e mirë, por unë kontrollova dhe nuk kishte asnjë. Por më bëri të mendoj, dhe bëra një grep -lr "404" . në dosjen e konfigurimit të apache. Gjeta një skedar të quajtur errordocument.conf që ka këtë rresht ErrorDocument 404 /404.shtml. Pra, kur Apache nuk arrin të gjejë skedarin .jpg, ai gjeneron një 404 dhe menjëherë kërkon një 404.shtml në rrënjën e faqes sime. Unë nuk kam një, kështu që tani (po hamendësoj) që gjeneron një tjetër 404? Dhe meqenëse /404.shtml nuk përputhet me asnjë nga rregullat e mia, ajo rishkruhet në index.php 12.11.2016
  • Kjo është ajo që dua të them me komentin tim të parë. 12.11.2016
  • Oh po! Mendoj se edhe ai koment ishte ende në mendjen time. Por pse gjurma nuk ju tregon se cili skedar po ndikon në ndryshime në URL-në e rishkruar? 12.11.2016
  • Dhe përgjigja ime. Unë mendoj se kam qenë shumë i shkurtër. 12.11.2016
  • Jeni i sigurt që jo? Ndoshta sepse keni përdorur trace6 jo trace8? 12.11.2016
  • Epo, flamuri i NS nuk funksionoi për disa arsye, por padyshim që ishe në rrugën e duhur. Do të provoj 'trace8'. Megjithatë, është mjaft e vështirë të ndjekësh 115 rreshta të prodhimit për vetëm një kërkesë të vetme për burim imazhi. Uroj të kishte një mënyrë më të lehtë. 12.11.2016
  • Nëse keni kaq shumë rreshta, mund të jeni duke bërë diçka të gabuar. Mbajeni flamurin NS pasi ai rregull duhet të zbatohet vetëm në kërkesën fillestare të përdoruesit. 12.11.2016
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..