mod_rewrite может переписывать / перенаправлять только запрошенные URI, а не те, которые есть в ваших HTML-документах. Поэтому вы должны сначала убедиться, что ваше PHP-приложение печатает правильные URI, поэтому /stories/17.html
вместо /stories.php?id=17
.
После этого вы можете использовать правило, предложенное Хосе Базилио:
RewriteRule ^stories/([0-9]+)\.html$ stories.php?id=$1
Хотя перенаправление запросов /stories.php?id=17
извне на /stories/17.html
и затем внутренне обратно на /stories.php?id=17
возможно, это не очень хорошая практика, так как это приведет к удвоению числа запросов. Но вот правило для этого:
RewriteCond %{THE_REQUEST} ^GET\ /stories\.php[?\s]
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&*([^&].*)?$
RewriteRule ^stories\.php$ /stories/%3.html?%1%4 [L,R=301]