2 回答

TA貢獻1770條經驗 獲得超3個贊
聽起來很直接:
RewriteEngine on RewriteRule ^/?(\d+)/([^/]+)/([^/]+)$ /index.php?id=$1&action=$2&name=$3 [END]
如果您使用上述規則收到內部服務器錯誤(http 狀態 500),那么您可能操作的是非常舊版本的 apache http 服務器。在這種情況下,您將在您的 http 服務器錯誤日志文件中看到一個不受支持的[END]
標志的明確提示。您可以嘗試升級或使用舊[L]
標志,在這種情況下它可能會工作相同,盡管這在一定程度上取決于您的設置。
此實現同樣適用于 http 服務器主機配置或分布式配置文件(“.htaccess”文件)。顯然重寫模塊需要在http服務器內部加載并在http主機中啟用。如果您使用分布式配置文件,您需要注意它的解釋在主機配置中完全啟用并且它位于主機的文件夾中DOCUMENT_ROOT
。
還有一條一般性的評論:您應該始終更喜歡將此類規則放在 http 服務器主機配置中,而不是使用分布式配置文件(“.htaccess”)。那些分布式配置文件增加了復雜性,通常是意外行為的原因,難以調試并且它們確實減慢了 http 服務器的速度。它們僅在您無法訪問真正的 http 服務器主機配置(閱讀:非常便宜的服務提供商)或堅持編寫自己的規則(這是一個明顯的安全噩夢)的應用程序的情況下作為最后的選擇提供。

TA貢獻1824條經驗 獲得超6個贊
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R]
RewriteCond %{THE_REQUEST} \ /(.*/|)(?:index\.php)?\?name=([^\s&]+) [NC]
RewriteRule ^ /%1%2/? [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index\.php
RewriteRule ^(.*/|)([^/]*)$ $1index.php?name=$2/ [L]
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header always set Content-Security-Policy "upgrade-insecure-requests;"
</IfModule>
- 2 回答
- 0 關注
- 213 瀏覽
添加回答
舉報