[英]Apache mod_rewrite: URL slug not updating
關於mod_rewrite
有一些SO問題,例如here和here ,但是到目前為止,我找不到適合我的示例的問題。
我有一個Apache網絡服務器,在根目錄var/www/html
運行我的PHP網站。 在/var/www/html/news
我有一個.htaccess
文件,該文件將用於將難看的$ _GET填充的URL字符串轉換為SEO友好的URL。
我當前的網址如下所示:
https://mywebsite.com/news/article.php?id=2&title=myfirstarticle
我希望我的網址看起來像這樣:
https://mywebsite.com/news/2/myfirstarticle
這是我的.htaccess文件 ,當前正在重定向到目標url結構。
RewriteEngine on
RewriteRule ^([^/]*)/([^/]*)$ /article.php?id=$1&title=$2
到目前為止,我的URL尚未更改為SEO友好URL,我缺少什么?
您需要處理兩個方向:外部重定向和內部重寫:
RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)id=(\d+)&title=([^&]+)(?:&|$)
RewriteRule ^article.php$ /news/%1/%2 [R=301]
RewriteRule ^([^/]+)/([^/]+)$ /article.php?id=$1&title=$2 [END]
一個好主意是從302臨時重定向開始,然后在確定一切都已正確設置之后,才將其更改為301永久重定向。 這樣可以防止在嘗試時緩存問題...
如果您使用上述規則收到內部服務器錯誤(http狀態500),則很可能是您運行了非常舊版本的apache http服務器。 在這種情況下,您將在http服務器錯誤日志文件中看到對不支持的[END]
標志的明確提示。 您可以嘗試升級或使用舊的[L]
標志,在這種情況下它可能會起作用,盡管這在一定程度上取決於您的設置。
此規則將在http服務器主機配置或動態配置文件(“ .htaccess”文件)中同樣起作用。 顯然,重寫模塊需要加載到http服務器內部並在http主機中啟用。 如果使用動態配置文件,則需要注意在主機配置中完全啟用了它的解釋,並且該解釋位於主機的DOCUMENT_ROOT
文件夾中。
還有一個一般性說明:您應該始終喜歡將此類規則放在http服務器主機配置中,而不要使用動態配置文件(“ .htaccess”)。 這些動態配置文件增加了復雜性,通常是導致意外行為,難以調試的原因,並且確實降低了http服務器的速度。 僅當您無法訪問真正的http服務器主機配置(閱讀:真正便宜的服務提供商)或堅持編寫自己的規則的應用程序(這顯然是安全的噩夢)時,才提供它們作為最后的選擇。
嘗試以下htaccess規則:
RewriteEngine On
RewriteRule ^news/([^/]*)/([^/]*)$ /news/article.php?id=$1&title=$2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.