htaccess - перенаправление, чтобы игнорировать вложенный подкаталог и, если возможно, сделать весь сайт не www - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть проблема, которая слишком сложна для меня, но я держу пари, что кто-то должен был делать это раньше, поэтому, пожалуйста, позвольте мне услышать от вас.;)

Вот ситуация:

У меня есть 1 основной домен с 3 подкаталогами, которые вложены друг в друга

(сверху внизвнизу) http://main-domain.com затем http://main-domain.com/company-name/ затем http://main-domain.com/company-name/blog/

В настоящее время существует 3 файла .htaccess - по 1 в каждой из 3 каталогов, показанных выше.

В чем проблема?

Вместо того, чтобы иметь www.main-domain.com/company-name/blog/ что бы то ни было, я бы хотел, чтобы main-domain.com/blog/whwhat

ИтакЯ хочу удалить www и, что более важно, удалить средний подкаталог;ie / company-name /

Я надеюсь, что следующие примеры помогут проиллюстрировать эту точку.

http://main-domain.com/company-name/index.php следует изменить на http://main-domain.com/index.php

http://main-domain.com/company-name/blog/my-first-article/должен быть изменен на http://main-domain.com/blog/my-first-article/

Зачем мне это нужно?

Мне нужен более короткий URL, который будет более оптимизирован для SEO.У меня слишком много обратных ссылок, использующих «старые» URL, поэтому мне нужно переписать их все модом.

Вот мои текущие 3 htaccess файла

root htaccess: main-domain.com

#Bypass InoCore Templating System

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /reservations/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /reservations/default.php [L]

Options -Indexes

</IfModule>

#END Bypass

#301 REDIRECT

Options +FollowSymlinks

RewriteEngine on

RewriteRule ^info.php - [L]

RewriteCond %{HTTP_HOST} ^www.domain1.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

RewriteCond %{HTTP_HOST} ^domain1.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

RewriteCond %{HTTP_HOST} ^www.domain2.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

RewriteCond %{HTTP_HOST} ^domain2.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

RewriteCond %{HTTP_HOST} ^www.domain3.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

RewriteCond %{HTTP_HOST} ^domain3.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

RewriteCond %{HTTP_HOST} ^main-domain.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

RewriteCond %{HTTP_HOST} ^www.main-domain.com [NC]
RewriteRule ^(.*)$ http://www.main-domain.com/company-name/$1 [R=301,NC]

название компании htaccess: main-domain.com/company-name/

RewriteEngine on

RewriteRule ^maping.php /maping.php

RewriteRule ^$ index.php?$1 [L]

RewriteRule (.*) index.php?$1 [L]

#php_flag magic_quotes_gpc off

#BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /company-name/

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /company-name/index.php [L]

</IfModule>

#END WordPress

блог htaccess: main-domain.com/company-name/blog/

RewriteEngine off

#BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /company-name/blog/

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /company-name/blog/index.php [L]

</IfModule>

#END WordPress

1 Ответ

1 голос
/ 20 апреля 2011

Ваш правильный и компактный root .htaccess должен быть таким:

Options +FollowSymlinks

RewriteEngine on

RewriteRule ^info.php - [L]

# match all the domains in single condition while www. is optional
RewriteCond %{HTTP_HOST} ^(www\.)?(domain1|domain2|domain3|main-domain)\.(com|tld)$ [NC]
RewriteRule ^company-name/(.*)$ http://www.domain.tld/$1 [R=301,L,NC,NE]
  • R = 301 будет перенаправлять со статусом https 301
  • L сделает последнее правило
  • NE - нет экранирующей строки запроса
  • NC предназначен для игнорирования сравнения регистра
  • $ 1 - ваша группа соответствия REQUEST_URI
...