.htaccess: без www на www + URL без расширений + без индекса - PullRequest
0 голосов
/ 17 сентября 2010

Я бы подумал, что это будет где-то лучше задокументировано, но не могу найти много информации по этому вопросу.

В основном я использую htaccess, чтобы привить 3 правила на сайт, над которым я работаю:

  1. Перенаправить / переписать без www на www
  2. Удалите расширения с каждой страницы сайта - это php файлы. Это означает, что индекс сайта становится www.example.co.uk/index вместо www.example.co.uk/index.php, поэтому ...
  3. Перенаправить / переписать www.example.co.uk/index на www.example.co.uk/

Это скрипт, который я скомпилировал из разных источников, он работает, но Google, похоже, не сканирует сайт, когда я указываю на URL-адреса без расширений в карте сайта , любая идея почему ? Заранее спасибо.

Options +FollowSymlinks
RewriteEngine On

# Rewrite index.php to /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/#?\ ]+/)*index\.php?\ HTTP/
RewriteCond %{HTTP_HOST} ^(www\.example\.co\.uk) [OR]
RewriteCond www.%{HTTP_HOST} ^(www\.example\.co\.uk)
RewriteRule ^(([^/]+/)*)index\.php?$ http://%1/$1 [R=301,L]

# Rewrite example.co.uk to www.example.co.uk for canonic purposes, this rule is paired with the previous
RewriteCond %{HTTP_HOST} ^example\.co\.uk [NC]
RewriteRule ^(.*)$ http://www.example.co.uk/$1 [R=301,L]
#REMOVE .php from file extensions
# If the requested URI does not contain a period in the final path-part
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
# and if it does not exist as a directory
RewriteCond %{REQUEST_fileNAME} !-d
# and if it does not exist as a file
RewriteCond %{REQUEST_fileNAME} !-f
# then add .php to get the actual filename
RewriteRule (.*) /$1.php [L]

# If client request header contains php file extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+\.)+php\ HTTP
# externally redirect to extensionless URI
RewriteRule ^(.+)\.php$ http://www.example.co.uk/$1 [R=301,L]

1 Ответ

0 голосов
/ 17 сентября 2010

Попробуйте эти правила:

# Redirect / rewrite non-www to www
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s://%1 ^on(.+)|offs(.+
RewriteRule ^ http%1%2%{REQUEST_URI} [L,R=301]

# Remove the extensions from each of the site pages - they're php files. Doing this means that the site index becomes www.site.com/index instead of www.site.com/index.php, so...
RewriteCond %{THE_REQUEST} ^GET\ (/[^?\ ]+)\.php[?\ ]
RewriteRule .+\.php$ %1 [L,R=301]

#Redirect / rewrite the www.site.com/index to www.site.com/
RewriteRule ^index$ / [L,R=301]
...