Я думаю, что это будет работать:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^[a-z0-9]+$
RewriteRule ^$ view.php?id=%{QUERY_STRING} [L]
Если вы хотите, чтобы перезапись отображалась в поле адреса браузера, вам придется заменить [L]
на [L,R=301]
.
Объяснение: Строка запроса (то, что следует за знаком вопроса) не является частью URL, который RewriteRule видит в своем шаблоне сопоставления, поэтому вы не можете проверить наличие знака вопроса там. В моем решении я запускаю правило тогда и только тогда, когда (RewriteCond
) строка запроса состоит только из a-z
и / или 0-9
, и мое правило переписывает только URL-адреса, заканчивающиеся косой чертой (за исключением строки запроса) , Я перенаправляю это на view.php?id=
, а затем добавляю к нему строку запроса.
Редактировать: Протестировано на моем Apache-сервере, и я не нашел никаких ошибок (пока).