2017-02-11 41 views
1

我想從這個如何重寫URL中的.htaccess文件

http://localhost/hiraniconfigmgr/subCategoryList.php?category=Test 

http://localhost/hiraniconfigmgr/subCategoryList/Test 

我有嘗試這個代碼,它工作正常的網址,但它阻止JS或CSS文件

RewriteCond %{REQUEST_URI} ((.*)/(.*)) 
RewriteRule ^(.*)/(.*)$ $1.php?category=$2 

爲隱藏文件擴展名,甚至我已經使用的代碼工作正常代碼belowe

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php 

回答

0

如果你的.htaccess位於內/hiraniconfigmgr然後將這些規則:

Options -MultiViews 
RewriteEngine On 

RewriteRule ^([\w-]+)/([\w-]+)/?$ $1.php?category=$2 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 

也請記住,當您目前的網址是 http://localhost/hiraniconfigmgr/subCategoryList/Test你相關的鏈接可能無法正常工作。爲了解決這個問題,你可以略低於您網頁的HTML的<head>部分補充一點:

<base href="/hiraniconfigmgr/" /> 

讓每一位相對URL是從基本URL,而不是從當前頁面的URL解決。

關閉MultiViews選項使用Options -MultiViews,因爲您的鏈接名稱subCategoryList.php文件名相同,因此建議您使用此選項。

0

這聽起來像你只想重寫*.php文件。

你可以改變你RewriteRule到:

RewriteCond %{REQUEST_URI} ((.*)/(.*)) 
RewriteRule ^(.*)/(.*\.php.*)$ $1.php?category=$2 

此外,如果你只是想用category?=.*查詢字符串PARMS重寫路徑:

RewriteCond %{REQUEST_URI} ((.*)/(.*)) 
RewriteRule ^(.*)/(.*\.php\?category=.*)$ $1.php?category=$2 
0

你可能lookig類似的東西:

RewriteEngine on 
RewriteRule ^/?hiraniconfigmgr/subCategoryList/([^/+])$ /hiraniconfigmgr/subCategoryList.php?category=$1 [END] 

上述規則將工作k位於主機DocumentRoot中的http服務器主機配置和動態配置文件(.htaccess)中,不做任何修改。

另一種方法是將這樣的動態配置文件/hiraniconfigmgr文件夾內,則該代碼可以被縮短到的是:

RewriteEngine on 
RewriteRule ^subCategoryList/([^/+])$ subCategoryList.php?category=$1 [END] 

如果收到一個HTTP狀態500使用此規則時(內部服務器錯誤) ,那麼很可能你正在使用一個非常舊的Apache服務器版本。在這種情況下,請嘗試用[L]標誌替換[END]標誌,然後重試。

如果您決定使用動態配置文件(而不是真正的http服務器主機配置),那麼您必須注意在主機配置中完全啓用這些文件的解釋。


而且一般提示:你應該總是喜歡將這種規則的HTTP服務器主機的配置裏面,而不是使用動態配置文件(「的.htaccess」)的。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器。它們僅作爲最後一種選擇,用於您無法控制主機配置的情況(閱讀:真正便宜的託管服務提供商),或者您擁有依賴編寫自己的重寫規則的應用程序(這是一個明顯的安全噩夢)。