apache - Simulating MVC/CoC folder structure in php with mod_rewrite -


my project directory structure:

project_root/ |- src/ |  |- model/ |  |- view/ |  |- controller/ |  -- ...others -- resources/    |- css/    |- js/    -- images/ 

ok, somewhere in src there file responsible redirecting controllers, views , on, let src/url_mapping.php, prepared solve kind of url, such /{controller}/{action}/{id}?{query}, there no problem here, big deal not want user realize folder structure exists, want hide them , let flow simples ror , other based systems.

i want allow http://host/{css,js,images}/* resources without allowing http://host/resources/* itself, , http://host/{controller}/{action}/{id}?{query} src/url_mapping.php file denying direct access http://host/src.

for now, closest managed following .htaccess file:

<ifmodule mod_rewrite.c>     rewriteengine on     rewritebase /      rewritecond %{document_root}/resources/$1 !-f     rewritecond %{document_root}/resources/$1 !-d     rewritecond %{document_root}/resources/$1 !-l     rewriterule (?!^resources/|^src/url_mapping.php/)^(.*)$ src/url_mapping.php/$1 [l,pt]      rewritecond %{document_root}/resources/$1 -f [or]     rewritecond %{document_root}/resources/$1 -d [or]     rewritecond %{document_root}/resources/$1 -l     rewriterule (?!^resources/)^(.*)$ /resources/$1 [l,pt] </ifmodule> 

in case first intention was: if users tries /resources or /src folder filtered src/url_mapping.php well, although trying several combinations no success on , on again.

i noted mod_rewrite in loop such way can not block resources directory src/url_mapping.php, limited .htaccess file hands tied, if there way accept solution.

the last choice 1 redirect , treating files in resources src/url_mapping.php, kill cache, avoiding reinvent wheel.

well, realised apache not smart, acceptable solution found changing directory tree hide non-resources content such way apache cannot access.

imagine documentroot /home/user/www, if browse http://hostname/somefile point /home/user/www/somefile, way files in /home/user/somedir/somefile not accessible apache, accessible php script if has ownership/permission on directory.

so, in resources put on /home/user/www , src on /home/user/private_html, url_mapping.php stayed on /home/user/www/index.php, way can fool user if throw 404 not found when direct accessing it.

the final tree:

project_root |- private_html |  |- model |  |- view |  |- controller |  -- ...others -- public_html    |- css    |- js    |- images    -- index.php 

where .htaccess file is:

<ifmodule mod_rewrite.c>     rewriteengine on     rewritebase / # change if there subdirectory      rewritecond %{request_filename} !-f     rewritecond %{request_filename} !-d     rewritecond %{request_filename} !-l     rewriterule ^(.*)$ index.php/$1 [l] </ifmodule> 

and index.php is:

<?php  if (!array_key_exists('redirect_url', $_server) && substr($_server['request_uri'], 0, strlen($_server['script_name'])) == $_server['script_name']) {     header('http/1.0 404 not found');     exit; }  define('valid_kernel', true);  require '../private_html/core/core.php';  $server = new server(); $server->request(array_key_exists('path_info', $_server) ? $_server['path_info'] : '/', $_request);  ?> 

this way permits access index.php if directoryindex, mean, http://hostname/ allowed http://hostname/index.php 404 not found because file should not exist, http://hostname/index.php/anything , http://hostname/index.php?anything, although http://hostname/anything redirect http://hostname/index.php/anything redirect_url allowed.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -