Apache mod Rewrite: как переписать эти URL-адреса, чтобы сделать чистый URL-адрес

Я пытаюсь сделать перезаписи за последние два дня.

  1. Принудительное использование www.example.com – сделано
  2. Скрыть расширение PHP – сделано, но не уверен, что это хороший способ
  3. Ошибка 404 на пользовательскую страницу – сделано

Теперь моя главная проблема

4. Запустите всю страницу в корне (/)

У меня есть следующие файлы:

news.php search.php store.php allstores.php 

Клиент запрашивает следующее:

 Type 1: http://www.example.com/news Type 2: http://www.example.com/search?q=term Type 3: http://www.example.com/allstores/H Type 4: http://www.example.com/myname 

Я хочу обрабатывать эти запросы клиентов следующим образом:

 Type 1: http://www.example.com/news ---rewrite to (add extension)-->news.php Type 2: http://www.example.com/search?q=term ---->No change, Let it same Type 3: http://www.example.com/allstores/H --rewrite to --->http://www.example.com/allstores.php?ln=H Type 4: http://www.example.com/myname ---rewrite to------> http://www.example.com/store?st=myname 

Я пробовал следующие перезаписи:

 RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] RewriteRule ^(.*) store.php?st=$1 [L] RewriteRule ^allstores/(.*)$ allstores.php?ln=$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+)$ /$1.php [L] ErrorDocument 404 /404.php 

Любая помощь очень заметна, спасибо

Можешь попробовать:

 Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ## If the request is for a valid directory RewriteCond %{REQUEST_FILENAME} -d [OR] ## If the request is for a valid file RewriteCond %{REQUEST_FILENAME} -f [OR] ## If the request is for a valid link RewriteCond %{REQUEST_FILENAME} -l ## don't do anything RewriteRule ^ - [L] RewriteRule ^allstores/([^/]+)/?$ /allstores.php?ln=$1 [L,QSA,NC] # To internally forward /foo to /foo.php RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.+?)/?$ /$1.php [L] RewriteCond %{QUERY_STRING} !^q=.+ [NC] RewriteRule ^([^/]+)/?$ /store.php?st=$1 [L,QSA]