使用htaccess清理URL。 没有收到查询字符串变量

I am working on urls of a site. I want to convert the following url into

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

this url

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

this is the htaccess code I am using.

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

I don't know anything about htaccess. usually I just copy paste the text and it works. the url with ?id= works fine but when try to use the 2nd url it doesn't have any id. I have to do this to many other pages as well and the all contain [.php?id=] which I want to replace with [/] slash

Try this rule in your 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]

Please try this:

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

Because you say that even without this rule, going to http://example.com/solution/asdf loads /solution.php on your server, something else must be working on your url. Because you say you didn't define such a rule, it must be coming from somewhere else. Either a rule is defined somewhere else (main config file) or MultiViews is enabled. If you can't apply anubhava's solution (disabling MultiViews), move your file somewhere else, for example under /public/solution.php, so that url never partly matches an existing file, then use the following rule.

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]

from all of the discussion I concluded that its difficult enough to do it with .htaccess as there might b some sort of module working on the urls of site from the hosting and I get both solution and solution.php directed to same page so I did it in php for now. as both of the following pages http://dev.steelogic.com/solution.php?id=metalbuildingproduct

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

being going to same pages but with the second url I was not getting query string var. so I wrote a PHP code as I knew on each page how many vars I need so it worked for me. although it may not be a good approach but it works

$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];
}

if any body can help me with .htaccess I will appreciate.