Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
litespeed_wiki:config:multiviews [2015/07/24 15:43]
Michael Alegre created
litespeed_wiki:config:multiviews [2018/09/13 15:13] (current)
Lisa Clarke Proofreading
Line 1: Line 1:
-====== ​How to enable ​Multiviews ======+====== ​Enabling ​Multiviews ======
  
-MultiViews is an Apache per-directory option, which is not naively ​supported by LiteSpeed ​web server ​at the time of this writing. However it can be achieved through rewrite ​rule+MultiViews is an Apache per-directory option, which is not natively ​supported by LiteSpeed ​Web Server ​at the time of this writing. Howeverit can be achieved through ​the rewrite ​rules
  
-For example:+===== How Apache Multiviews Works ===== 
 + 
 +The effect of MultiViews is as follows: if the server receives a request for ''/​some/​dir/​foo'',​ if ''​some/​dir''​ has MultiViews enabled, and ''/​some/​dir/​foo''​ does not exist, then the server reads the directory looking for files named ''​foo.*'',​ and effectively fakes up a type map which names all of those files, assigning them the same media types and content-encodings it would have if the client had asked for one of them by name. It then chooses the best match to the client'​s requirements. 
 + 
 +MultiViews may sometimes cause a very strange rewrite problem. When you turn on the rewrite log, you might see something like the following, which indicates "​MultiViews"​ is enabled:  
 + 
 +  [perdir /var/www/] add path info postfix: /​var/​www/​product.php -> /​var/​www/​product.php/​Test__Test.php 
 +  [perdir /var/www/] strip per-dir prefix: /​var/​www/​product.php/​Test__Test.php -> product.php/​Test__Test.php 
 +  [perdir /var/www/] applying pattern '​^([0-9]+)/​([^/​]+)\.php$'​ to uri '​product.php/​Test__Test.php'​ 
 +  [perdir /var/www/] add path info postfix: /​var/​www/​product.php -> /​var/​www/​product.php/​Test__Test.php 
 +  [perdir /var/www/] strip per-dir prefix: /​var/​www/​product.php/​Test__Test.php -> product.php/​Test__Test.php 
 +  [perdir /var/www/] applying pattern '​^prodotto/​([^/​]+)\.php$'​ to uri '​product.php/​Test__Test.php'​ 
 +  [perdir /var/www/] add path info postfix: /​var/​www/​product.php -> /​var/​www/​product.php/​Test__Test.php 
 +  [perdir /var/www/] strip per-dir prefix: /​var/​www/​product.php/​Test__Test.php -> product.php/​Test__Test.php 
 +  [perdir /var/www/] applying pattern '​^prodotto/​([^/​]+)\.php?​id=([0-9]+)$'​ to uri '​product.php/​Test__Test.php'​ 
 +  [perdir /var/www/] add path info postfix: /​var/​www/​product.php -> /​var/​www/​product.php/​Test__Test.php 
 +  [perdir /var/www/] strip per-dir prefix: /​var/​www/​product.php/​Test__Test.php -> product.php/​Test__Test.php 
 +  [perdir /var/www/] applying pattern '​^c/​([^/​]+)/​([^/​]+)\.php$'​ to uri '​product.php/​Test__Test.php'​ 
 +  [perdir /var/www/] pass through /​var/​www/​product.php  
 + 
 +The problem here is that the request is being modified by MultiViews, substituting ''/​product/''​ with ''/​product.php''​ and never triggering the mod_rewrite rule. 
 + 
 +Generally, to avoid such confusion, we don't recommend using the MultiViews function. 
 + 
 +===== Real Life Example Using pathinfo ===== 
 + 
 +Our customer is using an old jshop which works on Apache. After switching to LSWS, it always redirects to the homepage. There is a very very long rewrite in .htaccess, hence it is not easy to identify what is wrong. 
 + 
 +We enable the rewrite log for Apache and LSWS, but it still is not easy to identify the problem.  
 + 
 +The following is from the Apache rewrite log: 
 + 
 +  [Wed Sep 12 05:​46:​58.807252 2018] [rewrite:​trace3] [pid 679517:tid 140344885401344] mod_rewrite.c(483):​ [client 175.156.215.157:​58596] 175.156.215.157 - - [www.example.com/​sid#​7fa4b3f8b5d8][rid#​7fa460006a60/​initial] [perdir /​home/​user1/​public_html/​] add path info postfix: /​home/​user1/​public_html/​s.php -> /​home/​user1/​public_html/​s.php/​2/​menus-reading-michelin-star-restaurant-berkshire,​ referer: https://​www.example.com/​ 
 +  [Wed Sep 12 05:​46:​58.807300 2018] [rewrite:​trace3] [pid 679517:tid 140344885401344] mod_rewrite.c(483):​ [client 175.156.215.157:​58596] 175.156.215.157 - - [www.lortolan.com/​sid#​7fa4b3f8b5d8][rid#​7fa460006a60/​initial] [perdir /​home/​user1/​public_html/​] strip per-dir prefix: /​home/​user1/​public_html/​s.php/​2/​menus-reading-michelin-star-restaurant-berkshire -> s.php/​2/​menus-reading-michelin-star-restaurant-berkshire,​ referer: https://​www.example.com/​ 
 + 
 +We determine that MultiViews is the root cause for the rewrite problem.  
 + 
 +If the following MultiViews option were to be disabled in .htaccess, Apache wouldn'​t work anymore: 
 +  Options +MultiViews 
 + 
 +Why does Apache work but LSWS doesn'​t?​ Apache supports the above MultiViews while LSWS does not. So how do we make MultiViews work on LSWS? 
 + 
 +If a site has a URI that uses pathinfo, here's how the redirection should work: 
 +  /​topic/​Office/​Work ==> /​topic.php/​Office/​Work 
 +  /​update/​Office/​Work ==> /​update.php/​Office/​Work/​topic->​ /​topic.php 
 + 
 +The following is a code example to implement Multiviews that uses pathinfo through rewrite rules for LSWS: 
 + 
 +  # Multiviews example code...use this in an .htaccess file 
 +  RewriteEngine On 
 +  RewriteCond %{REQUEST_URI} !.+php* 
 +  RewriteCond %{DOCUMENT_ROOT}/​$1\.php -f 
 +  RewriteRule ^([^/​]+)/?​(.*)$ $1.php/$2 [L] 
 + 
 +We added the above code, and now LSWS works fine for this particular site. 
 + 
 +===== Multiple Language Example ===== 
 + 
 +The following is how it's set up with Apache Multiviews:
  
 <​code>​ <​code>​
Line 11: Line 69:
 </​code>​ </​code>​
  
-can be done through ​the following rewrite ​rule:+We can get the same effect with LSWS and the following rewrite ​rules:
  
 <​code>​ <​code>​
  • Admin
  • Last modified: 2015/07/24 15:43
  • by Michael Alegre