Я работал над созданием SEO дружественных URL для своего сайта и успешно выполнил это по следующим правилам:
RewriteEngine on
RewriteBase /
#redirect non www to www
RewriteCond %{HTTP_HOST} ^example.co.uk [NC]
RewriteRule ^(.*)$ http://www.example.co.uk/$1 [L,R=301]
# Redirect any request with page=var to /var/ format
RewriteCond %{QUERY_STRING} ^page=(.+[^/])$ [NC]
RewriteRule ^index\.cfm$ http://%{HTTP_HOST}/%1/? [R=301,L,NC]
# If not an existing file or directory rewrite any request
# to page var.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])/$ index.cfm?page=$1 [QSA,L]
Моя проблема в том, что из-за последнего правила (я думаю), любойЗапрос root dir превращается в дружественный URL-адрес, такой как /pagethatdoesntpointanywhere/
, указывает ли он куда-либо или нет.Теперь я был бы счастлив с 404, но это не то, что просто отображение домашней страницы.
Я также пытался добавить общее правило 404:
# 404 files that don't exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ /notfound.html [R=404,L,NC]
Но это также делает все дружественные URL-адреса 404-ми.
Может кто-нибудь объяснить, где я?что-то не так, пожалуйста?