{"id":20555683,"url":"https://github.com/attogram/htfaker","last_synced_at":"2025-10-28T02:07:15.811Z","repository":{"id":62489470,"uuid":"64120241","full_name":"attogram/htfaker","owner":"attogram","description":".htaccess functionality with the PHP built-in web server","archived":false,"fork":false,"pushed_at":"2020-03-31T09:11:01.000Z","size":64,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-16T18:02:47.382Z","etag":null,"topics":["htaccess","php-builtin-server"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/attogram.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-25T09:09:59.000Z","updated_at":"2020-03-31T09:11:04.000Z","dependencies_parsed_at":"2022-11-02T10:01:12.430Z","dependency_job_id":null,"html_url":"https://github.com/attogram/htfaker","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attogram%2Fhtfaker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attogram%2Fhtfaker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attogram%2Fhtfaker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attogram%2Fhtfaker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/attogram","download_url":"https://codeload.github.com/attogram/htfaker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242163848,"owners_count":20082224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["htaccess","php-builtin-server"],"created_at":"2024-11-16T03:19:55.086Z","updated_at":"2025-10-28T02:07:15.759Z","avatar_url":"https://github.com/attogram.png","language":"PHP","readme":"# htfaker\n\n[![Latest Stable Version](https://poser.pugx.org/attogram/htfaker/v/stable)](https://packagist.org/packages/attogram/htfaker)\n[![Latest Unstable Version](https://poser.pugx.org/attogram/htfaker/v/unstable)](https://packagist.org/packages/attogram/htfaker)\n[![Total Downloads](https://poser.pugx.org/attogram/htfaker/downloads)](https://packagist.org/packages/attogram/htfaker)\n[![License](https://poser.pugx.org/attogram/htfaker/license)](https://github.com/attogram/htfaker/blob/master/LICENSE.md)\n[![Code Climate](https://codeclimate.com/github/attogram/htfaker/badges/gpa.svg)](https://codeclimate.com/github/attogram/htfaker)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/798587683ca54661a8fb5df5ed850745)](https://www.codacy.com/app/attogram-project/htfaker?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=attogram/htfaker\u0026amp;utm_campaign=Badge_Grade)\n[`[CHANGELOG]`](https://github.com/attogram/htfaker/blob/master/CHANGELOG.md)\n\n[htfaker](https://github.com/attogram/htfaker) is a router script that emulates\n[Apache .htaccess](https://httpd.apache.org/docs/current/howto/htaccess.html)\nfunctionality for the\n[PHP built-in web server](http://php.net/manual/en/features.commandline.webserver.php).\n\n## Install\n\nExample install:\n```\ncomposer require attogram/htfaker\n```\n\n## Usage\n\nExample usage:\n\n```\ncd vendor/attogram/htfaker\nphp -S localhost:8080 router.php\n```\n\nthen open [http://localhost:8080/](http://localhost:8080/) in your web browser.\n\n## Status\n\nhtfaker is in the startup stage.\n\nIf you're interested in making a working library, please fork and contribute!\n\nhtfaker framework                    | *status*\u003ca id=\"htfaker\"\u003e\n------------------------------------ | ------------------------\nget document root directory          | **Testing**\nget current directory                | *in dev*\ncheck if request is for a file       | *in dev*\ncheck if request is for a directory  | *in dev*\nget .htaccess files, current to root | **Testing**\nparse all found .htaccess files      | **Testing**\nget all directives to apply          | *in dev*\napply directives                     | *in dev*\nshutdown                             | -\n\n[core](http://httpd.apache.org/docs/trunk/mod/core.html#allowoverride) directives | *status*\u003ca id=\"core\"\u003e\u003c/a\u003e\n-------------------- | --------------------\n[ErrorDocument](http://httpd.apache.org/docs/trunk/mod/core.html#errordocument) | [*in dev*](https://github.com/attogram/htfaker/blob/master/src/ErrorDocument.php)\nErrorDocument 400 (Bad Request) | -\nErrorDocument 401 (Unauthorized) | -\nErrorDocument 402 (Payment Required) | -\nErrorDocument 403 (Forbidden) | -\nErrorDocument 404 (Not Found) | -\nErrorDocument 500 (Internal Server Error) | -\n[ForceType](http://httpd.apache.org/docs/trunk/mod/core.html#forcetype) | -\n[Options](http://httpd.apache.org/docs/trunk/mod/core.html#options) | [*in dev*](https://github.com/attogram/htfaker/blob/master/src/Options.php)\nOptions -Indexes | -\nOptions +Indexes | -\n\n[mod_access_compat](http://httpd.apache.org/docs/trunk/mod/mod_access_compat.html) directives | *status*\n-------------------- | --------------------\n[Allow](http://httpd.apache.org/docs/trunk/mod/mod_access_compat.html#allow) | -\nAllow from all | -\nAllow from *host* | -\nAllow from *host [host] ...* | -\nAllow from *ip* | -\nAllow from *ip [ip] ...* | -\nAllow from *network/netmask* | -\nAllow from *network/nnn-CIDR* | -\nAllow from *env=* | -\n[Deny](http://httpd.apache.org/docs/trunk/mod/mod_access_compat.html#deny) | -\nDeny from all | -\nDeny from *host* | -\nDeny from *host [host] ...* | -\nDeny from *ip* | -\nDeny from *ip [ip] ...* | -\nDeny from *network/netmask* | -\nDeny from *network/CIDR* | -\nDeny from *env=* | -\n[Order](http://httpd.apache.org/docs/trunk/mod/mod_access_compat.html#order) | -\nOrder Allow,Deny | -\nOrder Deny,Allow | -\n[Satisfy](http://httpd.apache.org/docs/trunk/mod/mod_access_compat.html#satisfy) | -\nSatisfy All | -\nSatisfy Any | -\n\n[mod_alias](http://httpd.apache.org/docs/trunk/mod/mod_alias.html) directives | *status*\n-------------------- | --------------------\n[Redirect](http://httpd.apache.org/docs/trunk/mod/mod_alias.html#redirect) | -\n[RedirectPermanent](http://httpd.apache.org/docs/trunk/mod/mod_alias.html#redirectpermanent) | -\n[RedirectTemp](http://httpd.apache.org/docs/trunk/mod/mod_alias.html#redirecttemp) | -\n[RedirectMatch](http://httpd.apache.org/docs/trunk/mod/mod_alias.html#redirectmatch) | -\n\n[mod_dir](http://httpd.apache.org/docs/trunk/mod/mod_dir.html) directives | *status*\n-------------------- | --------------------\n[DirectoryCheckHandler](https://httpd.apache.org/docs/trunk/mod/mod_dir.html#directorycheckhandler) | -\n[DirectoryIndex](https://httpd.apache.org/docs/trunk/mod/mod_dir.html#directoryindex) | [*in dev*](https://github.com/attogram/htfaker/blob/master/src/DirectoryIndex.php)\nDirectoryIndex _local-url_ | -\nDirectoryIndex _local-url [local-url]..._ | -\nDirectoryIndex disabled | -\n[DirectoryIndexRedirect](https://httpd.apache.org/docs/trunk/mod/mod_dir.html#directoryindexredirect) | -\n[DirectorySlash](https://httpd.apache.org/docs/trunk/mod/mod_dir.html#directoryslash) | -\n[FallbackResource](https://httpd.apache.org/docs/trunk/mod/mod_dir.html#fallbackresource) | [*in dev*](https://github.com/attogram/htfaker/blob/master/src/FallbackResource.php)\nFallbackResource _local-url_ | -\nFallbackResource disabled | -\n\n[mod_rewrite](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html) directives | *status*\n-------------------- | --------------------\n[RewriteEngine](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html#rewriteengine) | -\n[RewriteOptions](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html#rewriteoptions) | -\n[RewriteBase](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html#rewritebase) | -\n[RewriteCond](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html#rewritecond) | -\n[RewriteRule](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html#rewriterule) | -\n\n[mod_authn_core](http://httpd.apache.org/docs/trunk/mod/mod_authn_core.html) directives | *status*\n-------------------- | --------------------\n[Require](http://httpd.apache.org/docs/trunk/mod/mod_authz_core.html#require) | -\n[AuthType](http://httpd.apache.org/docs/trunk/mod/mod_authn_core.html#authtype) | -\n[AuthName](http://httpd.apache.org/docs/trunk/mod/mod_authn_core.html#authname) | -\n\n[mod_authn_file](http://httpd.apache.org/docs/trunk/mod/mod_authn_file.html) directives | *status*\n-------------------- | --------------------\n[AuthUserFile](http://httpd.apache.org/docs/trunk/mod/mod_authn_file.html#authuserfile) | -\n\n[mod_authz_groupfile](http://httpd.apache.org/docs/trunk/mod/mod_authz_groupfile.html) directives | *status*\n-------------------- | --------------------\n[AuthGroupFile](http://httpd.apache.org/docs/trunk/mod/mod_authz_groupfile.html#authgroupfile) | -\n\n## License\n\nhtfaker is dual licensed under\n[The MIT License](http://opensource.org/licenses/MIT) or the\n[GNU General Public License](http://opensource.org/licenses/GPL-3.0), at your choosing.\n\nRead the\n[LICENSE.md](https://github.com/attogram/htfaker/blob/master/LICENSE.md)\nfile for more info.\n\n## TODO\n\n* use \u003chttps://github.com/tivie/php-htaccess-parser\u003e? - Apache License\n* use \u003chttps://github.com/jaytaph/HTRouter\u003e?\n* use \u003chttp://pecl.php.net/package/htscanner\u003e?\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fattogram%2Fhtfaker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fattogram%2Fhtfaker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fattogram%2Fhtfaker/lists"}