# dlang.org .htaccess file (local Apache configuration)

# Enable mod_rewrite
RewriteEngine On

# Indicate that this directory maps to the root
# directory of the domain.
RewriteBase /

# Phobos rewrites:

# Package files are now generated to std_foo.html
# instead of std_foo_package.html. This change was
# done to preserve the links to std.algorithm,
# std.range etc. after they were split into packages.
# However, we need redirects for packages in
# previous stable releases (namely, std.container).

RewriteRule ^(phobos(-prerelease)?/std_container)_package\.html $1.html [R=301,L]

Redirect 301 /appendices.html https://dlang.org/dstyle.html
Redirect 301 /COM.html http://wiki.dlang.org/COM_Programming
Redirect 301 /dll.html http://wiki.dlang.org/Win32_DLLs_in_D
Redirect 301 /how-tos.html https://wiki.dlang.org/Tutorials
Redirect 301 /htomodule.html http://wiki.dlang.org/Converting_C_.h_Files_to_D_Modules
Redirect 301 /language-reference.html https://dlang.org/spec/spec.html
Redirect 301 /memory.html http://wiki.dlang.org/Memory_Management
Redirect 301 /windows.html http://wiki.dlang.org/D_for_Win32
Redirect 301 /getstarted.html http://wiki.dlang.org/Getting_Started
Redirect 301 /tools.html http://wiki.dlang.org/Development_tools

Redirect 301 /bugstats.php /bugstats.html
Redirect 301 /bugstats.php.html /bugstats.html

RewriteRule ^changelog(.html)?$ changelog/index.html [R=301,L]

# OS detection for CLI manual
RewriteCond %{HTTP_USER_AGENT} Windows
RewriteRule ^dmd.html dmd-windows.html [R]

RewriteCond %{HTTP_USER_AGENT} Mac
RewriteRule ^dmd.html dmd-osx.html [R]

RewriteCond %{HTTP_USER_AGENT} Linux
RewriteRule ^dmd.html dmd-linux.html [R]

RewriteCond %{HTTP_USER_AGENT} FreeBSD
RewriteRule ^dmd.html dmd-freebsd.html [R]

# soft-fail to windows
RewriteRule ^dmd.html dmd-windows.html [L,R]

# legacy URLs of /spec/ pages
RewriteRule ^(spec|intro|lex|grammar|module|declaration|type|property|\
attribute|pragma|expression|statement|arrays|hash-map|struct|class|interface|\
enum|const3|function|operatoroverloading|template|template-mixin|contracts|\
version|traits|errors|unittest|garbage|float|iasm|ddoc|interfaceToC|\
cpp_interface|objc_interface|portability|entity|memory-safe-d|abi|simd)\
(\.html)?$ \
spec/$1.html [R=301,L]

# Foundation pages
Redirect 301 /foundation_overview.html https://dlang.org/foundation/index.html
Redirect 301 /foundation.html https://dlang.org/foundation/about.html
Redirect 301 /contributors.html https://dlang.org/foundation/contributors.html
Redirect 301 /sponsors.html https://dlang.org/foundation/sponsors.html
Redirect 301 /dlangupb-scholarship.html https://dlang.org/foundation/updscholarship.html
Redirect 301 /donate.html https://dlang.org/foundation/donate.html

# Legacy article pages
Redirect 301 /articles.html /articles/index.html
Redirect 301 /builtin.html /articles/builtin.html
Redirect 301 /code_coverage.html /articles/code_coverage.html
Redirect 301 /const-faq.html /articles/const-faq.html
Redirect 301 /cppcontracts.html /articles/cppcontracts.html
Redirect 301 /cpptod.html /articles/cpptod.html
Redirect 301 /ctarguments.html /articles/ctarguments.html
Redirect 301 /ctod.html /articles/ctod.html
Redirect 301 /d-array-article.html /articles/d-array-article.html
Redirect 301 /d-floating-point.html /articles/d-floating-point.html
Redirect 301 /dll-linux.html /articles/dll-linux.html
Redirect 301 /exception-safe.html /articles/exception-safe.html
Redirect 301 /faq.html /articles/faq.html
Redirect 301 /hijack.html /articles/hijack.html
Redirect 301 /intro-to-datetime.html /articles/intro-to-datetime.html
Redirect 301 /lazy-evaluation.html /articles/lazy-evaluation.html
Redirect 301 /migrate-to-shared.html /articles/migrate-to-shared.html
Redirect 301 /mixin.html /articles/mixin.html
Redirect 301 /pretod.html /articles/pretod.html
Redirect 301 /regular-expression.html /articles/regular-expression.html
Redirect 301 /safed.html /articles/safed.html
Redirect 301 /template-comparison.html /articles/template-comparison.html
Redirect 301 /templates-revisited.html /articles/templates-revisited.html
Redirect 301 /variadic-function-templates.html /articles/variadic-function-templates.html
Redirect 301 /warnings.html /articles/warnings.html
Redirect 301 /rationale.html /articles/rationale.html

# Error pages
ErrorDocument 404 /404.html
