簡體   English   中英

htaccess 中的 mod 重寫規則問題

[英]Problem with mod rewrite Rules in htaccess

我正在建立一個新網站,並想用 url 中的參數重寫一些文件。

該網站現在還沒有上線,不幸的是我在 mod_rewrite 方面沒有很多經驗。

那么我的問題是什么:

我有兩個文件:category.php 和 single.php

在我的索引上,我有一個菜單,通過 url 參數引用所有類別。 you find links to:例如在您可以找到以下鏈接:

等等

例如,在 sitename.com/category.php?c=首先,您會找到所有首先引用類別並鏈接到的帖子的列表:

等等

現在我嘗試將 url 重寫為以下結構:

我使用了以下代碼

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ categroy.php?c=$1 [L,QSA]
    RewriteRule ^(.*)/(.*)$ single.php?c=$1&name=$2 [L,QSA]
</IfModule>

每個 RewriteRule 都適用於自己,但在一起我不會得到預期的結果。

所以我現在嘗試了幾天,但我不明白。
所以希望這里有人可以提供幫助

非常感謝

您的嘗試存在幾個問題,但重點是您需要注意規則的順序。 由於規則是從上到下應用的,您需要首先在文件中放置更專業的規則(因此更進一步),稍后放置更多通用規則......

這是一個修改后的版本,可以為您指明正確的方向:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [END]

RewriteRule ^/?(\w+)/(\w+)/?$ single.php?c=$1&name=$2 [END,QSA]
RewriteRule ^/?(\w+)/?$ category.php?c=$1 [END,QSA]

如果您使用上述規則收到內部服務器錯誤(http 狀態 500),那么您可能運行的是非常舊版本的 apache http 服務器。 在這種情況下,您將在 http 服務器錯誤日志文件中看到不支持的[END]標志的明確提示。 您可以嘗試升級或使用舊的[L]標志,在這種情況下它可能會起作用,盡管這有點取決於您的設置。

這些規則同樣適用於 http 服務器主機配置或動態配置文件(“.htaccess”文件)。 顯然重寫模塊需要在http服務器中加載並在http主機中啟用。 如果您使用動態配置文件,您需要注意在主機配置中完全啟用它的解釋,並且它位於主機的DOCUMENT_ROOT文件夾中。

還有一個一般性的評論:你應該總是喜歡將這樣的規則放在 http 服務器主機配置中,而不是使用動態配置文件(“.htaccess”)。 這些動態配置文件增加了復雜性,通常是意外行為的原因,難以調試,而且它們確實會降低 http 服務器的速度。 它們僅在您無法訪問真正的 http 服務器主機配置(閱讀:非常便宜的服務提供商)或堅持編寫自己的規則的應用程序(這是一個明顯的安全噩夢)的情況下作為最后一個選項提供。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM