Перезапись URL через .htaccess в среде общего хостинга - PullRequest
0 голосов
/ 26 августа 2011

Мой колледж дал мне бесплатный блог с ограничительными возможностями. Это Moveable Type, и я не могу редактировать URL через интерфейс MT.

Они предлагают, чтобы я разместил страницу index.html, которая перенаправляет метаданные на полный URL моего блога. Вместо этого я хотел бы замаскировать его, используя mod_rewrite в файле .htaccess.

Как я могу изменить этот URL:

http://www.personal.mycollege.edu/myuserid/blogs/my_blog/

Просто:

http://www.personal.mycollege.edu/myuserid/

Кроме того, как я могу сделать так, чтобы он был постоянным в отношении статей и т. Д. По всему сайту?

1 Ответ

0 голосов
/ 26 августа 2011

Чтобы перезаписать (внутреннее перенаправление) /myuserid/ в /myuserid/blogs/my_blog/, когда это правило в .htaccess находится в папке /myuserid/, используйте это правило:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^$ blogs/my_blog/ [L]

Если вы добавите это правило чуть ниже указанного выше, вам также следует переписать статьи и т. Д.:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!blogs/my_blog/)(.+)$ blogs/my_blog/$1 [L]

Приведенное выше правило будет переписывать только несуществующие URL-адреса (я думаю, что это правильный подход - если вы думаете иначе, просто удалите 2 строки RewriteCond). Это означает, что если запрашивается /myuserid/hello.png и файл существует, он НЕ будет перезаписан на /myuserid/blogs/my_blog/hello.png.


Теоретически вы можете объединить эти 2 правила в одно (заменив (.+) на (.*)), но по какой-то странной причине он не работает (или работает неправильно) на некоторых серверах. В любом случае - вот оно:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!blogs/my_blog/)(.*)$ blogs/my_blog/$1 [L]

Кроме того, как я могу заставить его быть постоянным по статьям и т. Д. На протяжении всего сайте?

Это очень конкретный вопрос, и, не зная много деталей о том, как он генерирует ссылки и т. Д., Я не могу дать вам однозначный ответ на этот вопрос.

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

...