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
të .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/
RewriteRule .* index.php [L,NS]
11.11.2016ErrorDocument
s, 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 regjistrimin nëtrace8
për të parë se çfarë po ndodh. 11.11.2016trace6
. 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ë ngaRewriteRule
, 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,RewriteCond
të e ndalojnë atë. Duket sikur keni diçka diku nëfolder1
që po bën më shumë rishkrime ose emërtime, ndoshta me flamurinPT
siç tregojnë rreshtat 8 dhe 9 të seksionit të regjistrit. 11.11.2016.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ë quajturerrordocument.conf
që ka këtë rreshtErrorDocument 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.2016trace6
jotrace8
? 12.11.2016NS
pasi ai rregull duhet të zbatohet vetëm në kërkesën fillestare të përdoruesit. 12.11.2016