помогите с настройкой перенаправлений файлов .htaccess - PullRequest
0 голосов
/ 06 сентября 2010

Мне нужна помощь в настройке моего файла .htaccess для правильной обработки перенаправлений.

Вот что мне нужно, чтобы это произошло. Спам-фильтр Stackoverflow не позволил бы мне опубликовать полный домен. Поэтому, где я говорю «ДОМЕН», вы можете заменить «домен.com». (Мне также нужно было добавить и дополнительные т в http.)

  1. Запросы для DOMAIN/page версии файла должны быть перенаправлены на www.DOMAIN/page.
  2. Запросы на «дружественные» версии URL должны быть разрешены. Таким образом, файл, который действительно находится на www.DOMAIN/index.php?q=37, должен быть доступен для просмотра, перейдя на www.DOMAIN/latest-news
  3. У меня большой список перенаправлений 301. Недавно мы изменили сайт с CMS на основе .asp на сайт, написанный на PHP.

Пример:

redirect 301 /overview.asp http://www.DOMAIN/overview

Пункты 1 и 2 работают нормально.

Однако для пункта 3, если я вставлю в браузер запрос "http://www.DOMAIN/overview.asp" вместо перенаправления на понятное имя файла (" http://www.DOMAIN/overview") он будет перенаправлен на http://www.DOMAIN/index.php?q=overview.asp. Это это проблема.

Что мне нужно изменить, чтобы это работало правильно?

Моя конфигурация ниже:

## Fix Apache internal dummy connections from breaking [(site_url)] cache
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
RewriteRule .* - [F,L]

## Exclude /assets and /manager directories and images from rewrite rules
RewriteRule ^(manager|assets)/*$ - [L]
RewriteRule \.(jpg|jpeg|png|gif|ico)$ - [L]

## For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.DOMAIN/$1 [R=301,L]

redirect 301 /overview.asp http://www.DOMAIN/overview
redirect 301 /news.asp http://www.DOMAIN/news
#  ETC....

спасибо!

1 Ответ

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

Mod_rewrite делает именно то, что вы просите ... (да :-), это часто проблема с компьютерами).

В строке /overview.asp http://www.DOMAIN/overview вы устанавливаете браузеротправить новый запрос с нуля, который снова начинает весь цикл сверху и перехватывается директивой ^(.*)$ index.php?q=$1.

Прямо перед этой строкой вы должны поместить еще один RewriteCond для предотвращения ^(.*)$Правило применения, если REQUEST_FILENAME имеет значение обзор или новость .Вы также можете просто переписать / Overview.asp на обзор [L] вместо перенаправления.

Если вы можете, установите директиву RewriteLog на самую высокую степень детализации и посмотрите на файл журнала - он обычно дает очень хорошее представление о том, что на самом деле происходит ...

РЕДАКТИРОВАТЬ - если я получаю этоверно, вы должны делать это:

RewriteCond %{REQUEST_FILENAME} ! \.asp$
RewriteCond %{REQUEST_FILENAME} ! ^overview$
RewriteCond %{REQUEST_FILENAME} ! ^news$
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Это предотвратит перенаправление любого файла, заканчивающегося на .asp, плюс тех, кто ищет обзор и новости, на index.php.

Iв любом случае подозреваю, что вы получили что-то задом наперед в отношении этого SEO.Вы действительно должны начать со структуры строки запроса, которую ожидают ваши сценарии, и использовать ее в качестве основы для построения разумной схемы адресации URL.

РЕДАКТИРОВАТЬ # 2:

Был также пробелмногие между знаком взрыва и регулярным выражением.Следующий код не приходит из памяти, как предыдущий - я протестировал на своем локальном Apache и он делает то, что должен делать (если я правильно понял ..)

 RewriteCond %{REQUEST_FILENAME} !\.asp$
 RewriteCond %{REQUEST_FILENAME} !overview$
 RewriteCond %{REQUEST_FILENAME} !news$
 RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Надеюсьэто помогает

...