Apache-2.2

將 nginx 轉換為 Apache 重寫

  • January 28, 2012

我正在嘗試從 nginx 上的現有站點設置 CodeIgniter。我的本地機器是 Apache,這是 nginx 上的重定向方案。我怎麼寫這個使用RewriteRules

   if ($host ~* ^www\.(.*)) {
           set $host_without_www $1;
           rewrite ^(.*)$ http://$host_without_www$1 permanent;
   }
if ($request_uri ~* ^(/welcome(/index)?|/index(.php)?)/?$){
           rewrite ^(.*)$ / permanent;
   }
if ($request_uri ~* index/?$){
           rewrite ^/(.*)/index/?$ /$1 permanent;
   }
if (!-d $request_filename){
           rewrite ^/(.+)/$ /$1 permanent;
   }
if ($request_uri ~* ^/system){
           rewrite ^/(.*)$ /index.php?/$1 last;
           break;
   }
if (!-e $request_filename){
           rewrite ^/(.*)$ /index.php?/$1 last;
           break;
   }

像這樣的東西:

# These go in the VirtualHost context.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1$1 [R=301,L]

RewriteCond %{REQUEST_URI} ^(/welcome(/index)?|/index(.php)?)/?$ [NC]
RewriteRule ^ / [R=301,L]

RewriteRule ^/(.*)/index/?$ /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} ^/system [NC]
RewriteRule ^/(.*)$ /index.php?/$1 [L]

<Directory /path/to/docroot>
   # This is so that these have the correct filesystem path in the
   # REQUEST_FILENAME parameter.
   # If you already have a <Directory> for here, add these to it.

   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)/$ $1 [R=301,L]

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-l
   RewriteRule ^/(.*)$ /index.php?/$1 [L]
</Directory>

引用自:https://serverfault.com/questions/354612