Мои постоянные ссылки сломаны! Можно ли использовать mod_rewrite для игнорирования физического файла?

7 янв. 2011 г., 06:50:51
Просмотры: 377
Голосов: 5

На одном из сайтов, с которым я работаю, недавно разместили файл в корне сайта с именем "2011.html". Теперь все записи блога за 2011 год с постоянной ссылкой в формате год/месяц/день/название-записи не работают и вместо них загружается файл 2011.html. Попытка открыть архив по адресу domain.com/2011/ также некорректно загружает этот файл. 2010 и другие годы работают как положено.

Можно ли как-то использовать mod_rewrite, чтобы этот файл учитывался только при явном указании 2011.html в URL, а для всех остальных URL использовалась стандартная структура постоянных ссылок, чтобы восстановить функциональность блога?

Ссылка на этот файл была разослана в маркетинговом письме и получает много переходов, поэтому его нельзя переместить или переименовать.

0
Все ответы на вопрос 2
1
10

Причина, по которой это происходит, связана с согласованием содержимого. Обычно файл /2011.html не был бы доступен через /2011/, но согласование содержимого заставляет Apache автоматически искать файлы с именем 2011 (с любым расширением), когда он не может найти папку, прежде чем передать управление WordPress.

Это может быть довольно полезно, но если вам особенно не нужно согласование содержимого (самому WordPress оно не требуется), вы можете отключить его, добавив следующее в ваш .htaccess:

Options -MultiViews

Если это не сработает или вам действительно нужно согласование содержимого, вы можете переименовать файл 2011.html во что-то другое и использовать mod_rewrite, чтобы убедиться, что ссылка по-прежнему работает. Например, переименуйте 2011.html в happynewyear.html, а затем добавьте это в ваш .htaccess (перед другими RewriteRules):

RewriteRule ^2011\.html happynewyear.html [L]
7 янв. 2011 г. 13:00:42
Комментарии

Отключение согласования контента сработало отлично, спасибо!

Nate Dudek Nate Dudek
7 янв. 2011 г. 15:08:46
0

Да, именно для таких задач и был создан mod_rewrite. Однако вам придется переместить содержимое блога в другое место.

Например, если /2011/11/1/how-to-brew-beer.html была одной из статей блога, она больше не доступна по этому адресу, так как ссылка теперь битая. Поэтому вам нужно переместить ее куда-то в другое место:

   /2011_good/11/1/how-to-brew-beer.html

Ваше правило перезаписи должно соответствовать любому URL, начинающемуся с /2011/.*, и перезаписывать его на URL, который я указал выше, при условии, что статьи были перемещены именно туда.

Перемещение содержимого может оказаться трудоемкой задачей. На самом деле, я считаю, что гораздо проще просто переместить файл 2011.html в другое место и затем использовать правило перезаписи только для него, так как это всего один файл, в отличие от множества исторических данных.

Конечно, на данный момент прошло всего 7 дней 2011 года, так что вряд ли у вас уже накопилось столько постов за 2011 год, которые нужно переносить :)

7 янв. 2011 г. 09:15:28