Permalinks 漂亮鏈接變成404
在Macbook上安裝完WordPress 5.6,打開自帶的第一個帖子Hello World读串,默認的URL是http://localhost:8080/wordpress/?p=1
為了讓URL變成“漂亮的鏈接”已旧,如http://localhost:8080/wordpress/hello-world.html秸苗,我們在Settings --> Permalinks中將固定鏈接設(shè)置為http://localhost:8080/wordpress/%postname%.html
然后回到前端頁面,重新打開第一個帖子评姨,看到的卻是404 NOT FOUND难述,究竟發(fā)生了什么。
Pretty Permalinks 的必要條件
原來吐句,使用“漂亮的鏈接”是有條件的胁后,不是設(shè)置完P(guān)ermalinks格式就能用的。這對于剛接觸WP的新手來說嗦枢,是一個隱形的坑攀芯。
條件1:
對于運行Apache的服務(wù)器來說,必須要開啟mod_rewrite模塊文虏。
條件2:
在WordPress的home目錄侣诺,要允許符號鏈接FollowSymLinks。(一般都允許)
條件3:
在WordPress的home目錄氧秘,要允許AllowOverride All年鸳。(一般不允許)
條件4:
在WordPress的home目錄,要允許修改.htaccess文件丸相。(一般允許)
WP的一大好處就是文檔特別齊全搔确,對初學者比較友好。更多關(guān)于Permalinks的介紹可以參考下面官網(wǎng)的文檔:
檢測Apache是否支持mod_rewrite
Apache這部分的內(nèi)容跟WP其實關(guān)系不大灭忠,如果是自己搭建的服務(wù)器環(huán)境膳算,可以自己動手把Apache的配置文件修改一下。
首先我們用phpinfo()來查看一下環(huán)境配置弛作,在頁面上查找“Loaded Modules”涕蜂,這里有一大堆apache2handler載入的模塊,如果里面已經(jīng)包含“mod_rewrite”映琳,說明模塊已經(jīng)開啟机隙,不出意外這里沒有“mod_rewrite”,我們得修改Apache的配置文件來打開mod_rewrite萨西。
修改httpd.conf配置文件
我們先找到Apache配置文件的位置有鹿,打開httpd.conf配置文件。
在一大堆LoadModule開頭的行中原杂,我們通常會找到下面這行帶有rewrite_module,mod_rewrite.so所在的目錄不同服務(wù)器會有差異您机。
#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
將行首的”#”號刪除穿肄。
然后我們搜索"Directory"年局,找到DocumentRoot所在的目錄:
DocumentRoot "/usr/local/var/www"
<Directory "/usr/local/var/www">
#
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None
</Directory>
在這里,Options Indexes FollowSymLinks不用改動咸产,AllowOverride None要改成AllowOverride All矢否,修改完畢后保存退出。
重啟Apache和PHP服務(wù)
在Macbook上脑溢,重啟服務(wù)可以用下面的命令:
brew services restart httpd
brew services restart php@7.4
檢查.htaccess文件
我們在WordPress的安裝目錄里僵朗,會看到WP已經(jīng)自動寫入了.htaccess文件,文件內(nèi)容如下:
# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress%
因為我把WP裝在了wordpress目錄里屑彻,所以這里的RewriteBase是/wordpress/验庙。
如果WP裝在www根目錄下,則文件內(nèi)容會是:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
正常情況下.htaccess是由WP創(chuàng)建和修改的社牲,不需要手動去修改它粪薛。
驗證結(jié)果
現(xiàn)在,我們再來打開第一個帖子的漂亮鏈接http://localhost:8080/wordpress/hello-world.html搏恤,就可以正常顯示頁面了亿絮。
對于服務(wù)器環(huán)境跟我不一樣的明吩,可以仔細閱讀官網(wǎng)文檔,按圖索驥即可。