2014-01-22 75 views
0

我正在網站的網址上工作。我想下面的URL轉換爲使用htaccess清理URL。沒有收到查詢字符串變量

http://dev.steelogic.com/solution.php?id=metalbuildingproduct

這個網址

http://dev.steelogic.com/solution/metalbuildingproduct

這是我使用htaccess的代碼。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)/(.+)$ $1.php?id=$2 

我對htaccess一無所知。通常我只是複製粘貼文本,它的工作原理。 與?id =的網址正常工作 但嘗試使用第二個網址時,它沒有任何ID。 我必須這樣做許多其他的網頁,以及和所有包含[.PHP ID =?]我想用[/]削減

+0

我怎麼看它,你說'solution.php'被加載,但'$ _GET ['id']'是'NULL'?單憑這個規則,這是不可能的......但是, – Sumurai8

+0

是的。根本沒有$ _GET。我應該怎麼做才能使網址正常工作 –

+0

你有什麼其他規則?無論在任何「.htaccess」和你的主要配置文件... – Sumurai8

回答

1

在嘗試此規則,以取代DocumentRoot/.htaccess

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^/]+)/([^/]+)/?$ /$1.php?id=$2 [L,QSA] 
+0

我試過這個,但沒有得到我需要的結果。仍然$ _GET ['id']爲空 –

+0

最後一個RewriteCond中的$ 1從哪裏來?否則,RewriteRule對我來說看起來不錯。 –

+0

'$ 1'和'$ 2'實際上來自'RewriteRule'。也嘗試更新的代碼,並確保它在'DocumentRoot'中。 – anubhava

0

請試試這個:

<IfModule mod_rewrite.c> 
Options +SymLinksIfOwnerMatch 
RewriteBase/
RewriteRule ^solution/([^/.]+)/?$ solution.php?id=$1 [PT,L,NC,QSA] 
</IfModule> 
+0

謝謝你。但仍然不起作用 –

+0

請向我們展示solution.php和.htaccess的完整代碼 – Lab

0

因爲你說,即使沒有這條規則,將http://example.com/solution/asdf負載/solution.php您的服務器上,別的東西必須在您的網址工作。因爲你說你沒有定義這樣的規則,它必須來自其他地方。規則定義在其他位置(主配置文件)或MultiViews已啓用。如果您不能應用anubhava的解決方案(禁用MultiViews),請將文件移動到其他位置,例如在/public/solution.php之下,以便url永不部分匹配現有文件,然後使用以下規則。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/public/$1.php -f #partly copied from anubhava's answer 
RewriteRule ^([^/]+)/([^/]+)/?$ /public/$1.php?id=$2 [L] 
+0

我現在在PHP中完成了它。稍後我將解釋我何時能夠回答我的問題 –

0

所有我的結論是,它夠難用的.htaccess做到這一點,因爲可能b某種模塊在現場從託管的網址工作的討論,我得到兩個solutionsolution.php指向相同的頁面 所以我現在在php中做了。 既是以下頁面 http://dev.steelogic.com/solution.php?id=metalbuildingproduct

http://dev.steelogic.com/solution/metalbuildingproduct

被去同一頁面,但與第二網址我沒有得到查詢字符串變種。所以我寫了一個PHP代碼,就像我在每一頁上所知道的那樣,我需要多少個變量,所以它對我有用。雖然它可能不是一個好方法,但它的工作原理

$URI = explode("/", trim($_SERVER['REQUEST_URI'])); 
$numElems = count($URI); 
if ($numElems <= 4) { 
    $arr = array(); 
    $arr['id'] = $URI[2]; 
    if (!empty($URI[3])) 
     $arr['id2'] = $URI[3]; 
} 

,如果任何機構可以幫助我的.htaccess我會很高興。

相關問題