Apache-2.4
使用 .htaccess 刪除其他 php 頁面上的 index.php 和文件副檔名
我想消除在我的連結中包含 index.php 的需要。代替
example.com/about/index.php
我希望它是
example.com/about/
其次,我還希望其他非索引頁面可以在 url 中沒有 .php 文件副檔名的情況下進行導航。代替
example.com/about/who_we_are.php
我希望它是
example.com/about/who_we_are
我沒有運氣讓兩者同時工作。這是我的 .htaccess 文件中的內容:
Options -Indexes DirectoryIndex index.php index.htm index.html RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [L,R=301] RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.com/$1 [L,R=301] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
目前,它正在從非索引頁面中刪除 .php,但所有目錄索引頁面都重定向到首頁。
我究竟做錯了什麼?
發布此問題後不久,我找到了解決此問題的方法。
# remove .php; use THE_REQUEST to prevent infinite loops RewriteCond %{HTTP_HOST} ^www\.example\.com RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP RewriteRule (.*)\.php$ $1 [R=301] # remove index RewriteRule (.*)index$ $1 [R=301] # remove slash if not directory RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /$ RewriteRule (.*)/ $1 [R=301] # add .php to access file, but don't redirect RewriteCond %{REQUEST_FILENAME}.php -f RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) $1\.php [L]
我希望這可以幫助其他尋找解決此問題的方法的人。