2.13.8.9. Standard .htaccess for PrestaShop
Sample content of standard .htaccess for PrestaShop (generated automatically during installation):
- From root directory site:
- # ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
- # .htaccess automaticaly generated by PrestaShop e-commerce open-source solution
- # http://www.prestashop.com - http://www.prestashop.com/forums
- <IfModule mod_rewrite.c>
- <IfModule mod_env.c>
- SetEnv HTTP_MOD_REWRITE On
- </IfModule>
- RewriteEngine on
- #Domain: www.example.com
- RewriteRule . - [E=REWRITEBASE:/]
- RewriteRule ^api(?:/(.*))?$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]
- # Images
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2$3.jpg [L]
- RewriteCond %{HTTP_HOST} ^www.example.com$
- RewriteRule ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L]
- # AlphaImageLoader for IE and fancybox
- RewriteRule ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L]
- # Dispatcher
- RewriteCond %{REQUEST_FILENAME} -s [OR]
- RewriteCond %{REQUEST_FILENAME} -l [OR]
- RewriteCond %{REQUEST_FILENAME} -d
- RewriteRule ^.*$ - [NC,L]
- RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L]
- </IfModule>
- AddType application/vnd.ms-fontobject .eot
- AddType font/ttf .ttf
- AddType font/otf .otf
- AddType application/font-woff .woff
- AddType font/woff2 .woff2
- <IfModule mod_headers.c>
- <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|svg)$">
- Header set Access-Control-Allow-Origin "*"
- </FilesMatch>
- </IfModule>
- #If rewrite mod isn't enabled
- ErrorDocument 404 /index.php?controller=404
- # ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
- From subdirectory adminpanels (GitHub):
- # Use the front controller as index file. It serves as a fallback solution when
- # every other rewrite/redirect fails (e.g. in an aliased environment without
- # mod_rewrite). Additionally, this reduces the matching process for the
- # start page (path "/") because otherwise Apache will apply the rewriting rules
- # to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
- DirectoryIndex index.php
- # By default, Apache does not evaluate symbolic links if you did not enable this
- # feature in your server configuration. Uncomment the following line if you
- # install assets as symlinks or if you experience problems related to symlinks
- # when compiling LESS/Sass/CoffeScript assets.
- # Options FollowSymlinks
- # Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve
- # to the front controller "/app.php" but be rewritten to "/app.php/app".
- <IfModule mod_negotiation.c>
- Options -MultiViews
- </IfModule>
- <IfModule mod_rewrite.c>
- RewriteEngine On
- # Determine the RewriteBase automatically and set it as environment variable.
- # If you are using Apache aliases to do mass virtual hosting or installed the
- # project in a subdirectory, the base path will be prepended to allow proper
- # resolution of the app.php file and to redirect to the correct URI. It will
- # work in environments without path prefix as well, providing a safe, one-size
- # fits all solution. But as you do not need it in this case, you can comment
- # the following 2 lines to eliminate the overhead.
- RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
- RewriteRule ^(.*) - [E=BASE:%1]
- # Sets the HTTP_AUTHORIZATION header removed by apache
- RewriteCond %{HTTP:Authorization} .
- RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
- # Keep legacy entry points
- RewriteRule ^(ajax|ajax_products_list|ajax-tab|backup|cron_currency_rates)\.php - [P]
- RewriteRule ^(displayImage|drawer|footer\.inc|functions|get-file-admin)\.php - [P]
- RewriteRule ^(grider|header\.inc|init|login|password|pdf|searchcron)\.php - [P]
- # If the URL is a legacy on index.php?controller=..., do not rewrite (let the legacy take it)
- RewriteCond %{QUERY_STRING} (^|&)controller=|(^|&)tab=
- RewriteRule .* - [P]
- # Redirect to URI without front controller to prevent duplicate content
- # (with and without `/app.php`). Only do this redirect on the initial
- # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
- # endless redirect loop (request -> rewrite to front controller ->
- # redirect -> request -> ...).
- # So in case you get a "too many redirects" error or you always get redirected
- # to the start page because your Apache does not expose the REDIRECT_STATUS
- # environment variable, you have 2 choices:
- # - disable this feature by commenting the following 2 lines or
- # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
- # following RewriteCond (best solution)
- # RewriteCond %{ENV:REDIRECT_STATUS} ^$
- # RewriteRule ^index\.php(/(.*)) %{ENV:BASE}/$2 [R=301,L]
- # If the requested filename exists, simply serve it.
- # We only want to let Apache serve files and not directories.
- RewriteCond %{REQUEST_FILENAME} -f
- RewriteRule .? - [L]
- # Rewrite all other queries to the front controller.
- RewriteRule .? %{ENV:BASE}/index.php [L]
- </IfModule>
- <IfModule !mod_rewrite.c>
- <IfModule mod_alias.c>
- # When mod_rewrite is not available, we instruct a temporary redirect of
- # the start page to the front controller explicitly so that the website
- # and the generated links can still be used.
- RedirectMatch 302 ^/$ /index.php/
- # RedirectTemp cannot be used instead
- </IfModule>
- </IfModule>