標籤:

PHP項目在Nginx站點二級目錄時的偽靜態規則

PHP項目在Nginx站點二級目錄時的偽靜態規則

最近在伺服器處理項目時,想把多個項目放在伺服器的根目錄下面,通過根目錄的二級目錄來訪問相對應的項目,主要是為了方面在各個項目裡面用不同的SVN來控制各個項目。

但是把項目部署到伺服器上了後卻出現了路由找不到,返回404的問題,根目錄下的基礎文件phpinfo可以正常訪問,項目裡面Publicimage目錄下面的圖片也可以訪問到,說明是在伺服器部署項目時偽靜態失效了,因為windows是在Apache下開發的,nginx下.htaccess文件不生效,當時只寫了一級目錄下訪問的偽靜態規則。

  1. server {
  2. listen 80;
  3. server_name test.test.com;
  4. root /usr/share/nginx/html;
  5. index index.php index.html;
  6. location / {
  7. try_files $uri $uri/ =404;
  8. if (!-e $request_filename) {
  9. rewrite ^(.*)$ /index.php?s=$1 last;
  10. }
  11. }
  12. }

後來在網上查找到二級目錄需要在location後面添加二級目錄名,並且在rewrite規則裡面把路由的正則改寫,加上二級目錄的規則後

  1. server {
  2. listen 80;
  3. server_name test.test.com;
  4. root /usr/share/nginx/html;
  5. index index.php index.html;
  6. location / {
  7. try_files $uri $uri/ =404;
  8. if (!-e $request_filename) {
  9. rewrite ^(.*)$ /index.php?s=$1 last;
  10. }
  11. }
  12. location /projectOne/ {
  13. try_files $uri $uri/ =404;
  14. if (!-e $request_filename) {
  15. rewrite ^projectOne/(.*)$ /projectOne/index.php?s=$1 last;
  16. }
  17. }
  18. }

但是這樣配置後訪問還是失敗,需要使用index.php?m=index&c=index&a=index的路由方式來訪問當前控制器,偽靜態規則沒有生效。後來又思考了下,不生效的原因可能是在rewrite規則裡面正則表達式不能識別「/」,後來將正則改了點,另外的一個項目使用的是thinkphp5的框架,入口在三級目錄的public下面,將改寫的規則放上去後,把thinkphp的路由規則選成URL_MODEL => 1, 後兩個項目都可以在根目錄下使用二級目錄來分別控制了。

  1. server {
  2. listen 80;
  3. server_name test.test.com;
  4. root /usr/share/nginx/html;
  5. index index.php index.html;
  6. location / {
  7. try_files $uri $uri/ =404;
  8. if (!-e $request_filename) {
  9. rewrite ^(.*)$ /index.php?s=$1 last;
  10. }
  11. }
  12. location /projectOne/ {
  13. try_files $uri $uri/ =404;
  14. if (!-e $request_filename) {
  15. rewrite ^/projectOne/(.*)$ /projectOne/index.php?s=$1 last;
  16. }
  17. }
  18. location /projectTwo/public/ {
  19. try_files $uri $uri/ =404;
  20. if (!-e $request_filename) {
  21. rewrite ^/projectTwo/public/(.*)$ /projectTwo/public/index.php?s=$1 last;
  22. }
  23. }
  24. }

第一個項目

第二個項目


推薦閱讀:

php自學
php 靜態方法和靜態屬性及其調用方式
編譯型語言和解釋型語言區別之我見
php開發常用函數總結

TAG:Nginx | PHP | 科技 |