htaccess_recipes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
htaccess_recipes [2021/04/05 07:17] – [Redirect to a custom error page] hc9 | htaccess_recipes [2022/02/23 21:41] – Added not about not applicable to nginx-served peteyboy | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== .htaccess recipes ====== | ====== .htaccess recipes ====== | ||
+ | |||
+ | :!: Note: .htaccess only works at SDF on pages served by Apache, which at the time of this writing (2022/ | ||
+ | |||
+ | |||
+ | === Introduction === | ||
.htaccess is the default file used by the [[http:// | .htaccess is the default file used by the [[http:// | ||
Line 20: | Line 25: | ||
===== Redirect to a custom error page ===== | ===== Redirect to a custom error page ===== | ||
- | Do you want your visitors see your custom error pages when something goes wrong (e.g., a page not found error)? There' | + | Do you want your visitors see your custom error pages when something goes wrong (e.g., a page not found error)? There' |
===== Deny directory listing ===== | ===== Deny directory listing ===== | ||
Line 28: | Line 33: | ||
'' | '' | ||
+ | ===== Save the current directory as an environment variable ===== | ||
+ | |||
+ | You might already be aware that the options in an htaccess file will affect all the files in subdirectories of the htaccess file location, unless overridden by htaccess files deeper into the path. But did you ever wish you could dynamically infer the location of your base htaccess file, for substitution into later directives? It turns out that Perl regexes (used in Apache' | ||
+ | |||
+ | If you made your website accessible via tilde-style URLs (running '' | ||
+ | |||
+ | < | ||
+ | RewriteEngine on | ||
+ | RewriteBase "/" | ||
+ | RewriteCond $0# | ||
+ | RewriteRule ^.*$ - [E=CWD:%2] | ||
+ | |||
+ | RewriteCond %{HTTP_HOST} ^(www\.)? | ||
+ | RewriteCond %{REQUEST_FILENAME} !-f | ||
+ | RewriteCond %{REQUEST_FILENAME} !-d | ||
+ | RewriteRule ^.*$ %{ENV: | ||
+ | </ | ||
+ | |||
+ | The # symbol serves as an arbitrary delimiter, ensuring that the second parenthesized group captures the working directory that's known to the server at the time of processing. Whether the working directory is an absolute pathname on the filesystem or an alias that will later be expanded by mod_userdir, | ||
+ | |||
+ | This example can be extended to perform different redirections depending on which virtual host handled the transaction (just create a new stanza with a different condition on %{HTTP_HOST}). In this way you can give your visitors the same experience whether they' | ||
+ | |||
+ | Because these RewriteRules impose additional processing demands on the server for each request, hacks like these should be a last resort. If the other workarounds mentioned in [[custom_error_pages_for_your_site|custom error pages for your site]] address your use case, they should be implemented instead. | ||
===== Add (or force) MIME-type ===== | ===== Add (or force) MIME-type ===== | ||
htaccess_recipes.txt · Last modified: 2022/08/01 20:35 by peteyboy