Nginx
將 htaccess 轉換為 Nginx ReWrite(自動轉換不起作用)
嗨,有人碰巧知道 Nginx 重寫規則嗎?
我正在嘗試將此 Apache .htaccess 轉換為 Nginx Rewrite,我已經嘗試過使用線上轉換器
登錄後首頁和儀表板工作正常,但:新聞、列表、影片、音樂、民意調查和測驗部分無法正常工作,他們給出 404
我有 32 小時不間斷不睡覺設置伺服器它讓我發瘋
任何幫助將不勝感激
這是我要轉換的 Apache .htaccess:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^$ index.php?link1=home [NC,QSA] RewriteRule ^news/(.*)$ index.php?link1=news&id=$1 [NC,QSA] RewriteRule ^lists/(.*)$ index.php?link1=lists&id=$1 [NC,QSA] RewriteRule ^polls/(.*)$ index.php?link1=polls&id=$1 [NC,QSA] RewriteRule ^quiz/(.*)$ index.php?link1=quiz&id=$1 [NC,QSA] RewriteRule ^videos/(.*)$ index.php?link1=videos&id=$1 [NC,QSA] RewriteRule ^music/(.*)$ index.php?link1=music&id=$1 [NC,QSA] RewriteRule ^edit-post/(.*)$ index.php?link1=edit-post&id=$1 [NC,QSA] RewriteRule ^delete-post/(.*)$ index.php?link1=delete-post&id=$1 [NC,QSA] RewriteRule ^settings/(.*)/(.*)$ index.php?link1=settings&page=$1&user=$2 [NC,QSA] RewriteRule ^settings/(.*)$ index.php?link1=settings&page=$1 [NC,QSA] RewriteRule ^admin-cp$ admincp.php [NC,QSA] RewriteRule ^admin-cp/(.*)$ admincp.php?page=$1 [NC,QSA] RewriteRule ^admincp/(.*)$ index.php?link1=admincp&page=$1 [NC,QSA] RewriteRule ^admin-cdn/(.*)$ admin-panel/$1 [L] RewriteRule ^tags/(.*)$ index.php?link1=tags&tag=$1 [NC,QSA] RewriteRule ^feeds/rss(/?|)$ index.php?link1=feeds&page=home [NC,QSA] RewriteRule ^post_data/(.*)/(.*)(/?|)$ index.php?link1=post_data&post_type=$1&id=$2 [NC,QSA] RewriteRule ^terms/(.*)$ index.php?link1=terms&type=$1 [NC,QSA] RewriteRule ^go_pro(?:\/{0,1}|)$ index.php?link1=go_pro [NC,QSA] RewriteRule ^latest-(.*)/(\d+)$ index.php?link1=latest-$1&c_id=$2 [NC,QSA] RewriteRule ^latest-(.*)/rss(/?|)$ index.php?link1=rss&page=$1 [NC,QSA] RewriteRule ^ads(?:\/?|)$ index.php?link1=ads [NC,QSA] RewriteRule ^ads/create-new(?:\/?|)$ index.php?link1=create_ad [NC,QSA] RewriteRule ^ads/edit/([0-9]+)(?:\/?|)$ index.php?link1=edit_ad&ad_id=$1 [NC,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^@([^\/]+)(\/|)$ index.php?link1=profile&u=$1 [QSA] RewriteRule ^@([^\/]+)(\/|)/(.*)$ index.php?link1=profile&u=$1&page=$2 [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\/]+)(\/|)$ index.php?link1=$1 [QSA] <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/opentype BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </IfModule>
這是自動轉換的文件(部分工作,在我的一些版本之後,基於 3 小時閱讀 Nginx 文件)
location / { if (!-e $request_filename){ rewrite ^/$ /index.php?link1=home; } rewrite "^/go_pro(?:\/{0,1}|)$" /index.php?link1=go_pro; if (!-e $request_filename){ rewrite ^/@([^\/]+)(\/|)$ /index.php?link1=profile&u=$1; } rewrite ^/@([^\/]+)(\/|)/(.*)$ /index.php?link1=profile&u=$1&page=$2; if (!-e $request_filename){ rewrite ^/([^\/]+)(\/|)$ /index.php?link1=$1; } } (**_not working from here and below news, list, video, music, polls and quiz sections_**) location /news { rewrite ^/news/(.*)$ /index.php?link1=news&id=$1; } location /lists { rewrite ^/lists/(.*)$ /index.php?link1=lists&id=$1; } location /polls { rewrite ^/polls/(.*)$ /index.php?link1=polls&id=$1; } location /quiz { rewrite ^/quiz/(.*)$ /index.php?link1=quiz&id=$1; } location /videos { rewrite ^/videos/(.*)$ /index.php?link1=videos&id=$1; } location /music { rewrite ^/music/(.*)$ /index.php?link1=music&id=$1; } location /edit { rewrite ^/edit-post/(.*)$ /index.php?link1=edit-post&id=$1; } location /delete { rewrite ^/delete-post/(.*)$ /index.php?link1=delete-post&id=$1; } location /settings { rewrite ^/settings/(.*)/(.*)$ /index.php?link1=settings&page=$1&user=$2; rewrite ^/settings/(.*)$ /index.php?link1=settings&page=$1; } (**_admin panel and the other admin, term, ads, latest,tags and feed and all rest sections below this line work fine_**) location /admin { rewrite ^/admin-cp$ /admincp.php; rewrite ^/admin-cp/(.*)$ /admincp.php?page=$1; } location /admincp { rewrite ^/admincp/(.*)$ /index.php?link1=admincp&page=$1; } location /admin-cdn/ { alias /admin-panel/; } location /tags { rewrite ^/tags/(.*)$ /index.php?link1=tags&tag=$1; } location /feeds { rewrite ^/feeds/rss(/?|)$ /index.php?link1=feeds&page=home; } location /post_data { rewrite ^/post_data/(.*)/(.*)(/?|)$ /index.php?link1=post_data&post_type=$1&id=$2; } location /terms { rewrite ^/terms/(.*)$ /index.php?link1=terms&type=$1; } location /latest { rewrite ^/latest-(.*)/(\d+)$ /index.php?link1=latest-$1&c_id=$2; rewrite ^/latest-(.*)/rss(/?|)$ /index.php?link1=rss&page=$1; } location /ads { rewrite ^/ads(?:\/?|)$ /index.php?link1=ads; rewrite ^/ads/create-new(?:\/?|)$ /index.php?link1=create_ad; rewrite ^/ads/edit/([0-9]+)(?:\/?|)$ /index.php?link1=edit_ad&ad_id=$1; }
如果我在問題中犯了任何錯誤;請原諒我幾乎沒有醒來,我是一名電子工程師,正在嘗試為我的物聯網設備設置伺服器前端和後端;我不是程序員,但我非常欽佩他們,學習了一些基本的 WebDeV,但這是我第一次使用 Nginx 編碼不是我的強項,並不是每個人都對我很好https://stackoverflow.com/questions/63078446/converting -htaccess-to-nginx-rewrite-autoconverting-not-working?noredirect=1#comment111550833_63078446
任何幫助將不勝感激提前謝謝
您應該為您的部分遵循此模式:
location / { try_files $uri /index.php?link1=home; } location ~ ^/go_pro(?:\/{0,1}|)$ { try_files /index.php?link1=go_pro =404; } location ~ ^/news/(?<newsid>.*)$ { try_files /index.php?link1=news&id=$newsid =404; }
這種寫位置的方式更容易閱讀和理解,並且不需要那些是evil
if
的語句。一要注意
location
段加工順序。