2016-10-10 66 views
0

我遇到問題了。我希望將URL從「index.php?page = somepage」重寫爲寫入「somepage」。Nginx重寫index.php?page =聯繫人只需聯繫

這究竟是怎麼回事在.htaccess如果它可以幫助

RewriteEngine on 
RewriteRule ^(\w+)$ index.php?page=$1 [L,NC,QSA] 
RewriteRule ^(\w+)+\/$ index.php?page=$1 [L,NC,QSA] 

服務器塊:

server { 
     listen 80; 
     listen [::]:80; 
     server_name domain.com; 

     root /home/www/domain.com; 

     index index.php index.html index.htm; 

     location/{ 
       try_files $uri $uri/ =404; 
     } 

     location ~ \.php$ { 
       try_files $uri =404; 
       rewrite ^/(w+)$ /index.php?page=$1 last; 
       rewrite ^/(w+)+/$ /index.php?page=$1 last; 
       fastcgi_pass unix:/var/run/php5-fpm.sock; 
       fastcgi_index index.php; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       include fastcgi_params; 

     } 
} 
+0

提供你的整個'server'塊吧。如果看以下問題的評論,我會建議其他事情正在進行。 –

+0

@JoeDoherty在問題中添加了服務器塊。 –

+0

不要重寫,它仍然會工作,請嘗試刪除在php塊中的兩個重寫命令。 – Satys

回答

0

使用的.htaccess nginx的轉換嘗試,這一段代碼似乎工作:

rewrite ^/(w+)$ /index.php?page=$1 last; 
rewrite ^/(w+)+/$ /index.php?page=$1 last; 

編輯:我想重寫過分複雜的東西。什麼,我試圖做的解決方案是這樣的:

location/{ 
    try_files $uri $uri/ /index.php?page=$uri; 
} 
1

請嘗試以下代碼,

server { 
    ... 
    rewrite ^/index.php?page=(.*) /$1 permanent; 
    ... 
    location ~ /(.*) { 
     try_files $uri $uri/ /index.php?page=$1; 
    } 

    location ~ \.php { 
     ... 
     try_files $uri =404; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
     ... 
    } 
    ... 
} 
+0

它幾乎工作。我也需要從頁面參數中獲取實際值。目前使用'$ _GET',我得到一個空數組。 –

+0

進一步檢查,你確定重寫規則不應該顛倒嗎?所以URL的'/ contact'正在處理爲'index.php?page = contact',這樣用戶實際上看到了'/ contact'? –

相關問題