SEO дружественные URL изменяют каталог по умолчанию - PullRequest
1 голос
/ 02 декабря 2011

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

Вот код в .htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^view-([0-9]+)$ view.php?id=$1 [NC,QSA]

Так что, когда я получаю доступ к http://domain/project/view-44 работает нормально, но мне бы хотелось, чтобы в конце он работал со слешем, например http://domain/project/view-44/

Так что я изменил последнюю строку на

RewriteRule ^view-([0-9]+)/$ view.php?id=$1 [NC,QSA]

И теперь, когда я получаю доступhttp://domain/project/view-44/ все изображения, javascripts и стиль исчезли.

Теперь вместо получения CSS от http://domain/project/style.css он пытается получить его от http://domain/project/view-44/style.css

Я считаю, что проблема заключается в неправильном способе указания URL для элементов.В моем случае это просто

<link rel="stylesheet" type="text/css" href="style.css" >
<img src="images/web/showreel.png" alt="Image1" />

Значит ли это, что я должен указывать полный URL (http://domain/project/images/web/showreel.png) в каждом необходимом элементе?

Ответы [ 4 ]

3 голосов
/ 02 декабря 2011

Всегда лучше указывать абсолютный URL, так как вы знаете, что документ всегда будет доступен.Я знаю, что это longwinded, но вместо объявления

<img src='http://domain/project/images/web/showreel.png' />

Установите глобальную переменную PHP, например

define('SITE_URL', ' http://domain/project');

Затем выполните

<img src='<?php echo SITE_URL; ?>/images/web/showreel.png' />

Также в отношении .htaccess, взгляните на http://blog.valtersboze.com/2009/06/add-or-remove-trailing-slash-in-url-with-htaccess/

Это объясняет, как удалить или сохранить завершающий слеш, но не оба, никогда оба, Google не любит оба, они будут видеть это как дублирующийся контент.

2 голосов
/ 02 декабря 2011

Простое решение - использовать

<base href="/index">

в <head> ваших шаблонов HTML. Таким образом, все ссылки на ресурсы снова становятся относительными к корневому каталогу, независимо от виртуальной структуры RewriteRule.

http://www.w3.org/TR/html5/semantics.html#the-base-element

2 голосов
/ 02 декабря 2011

Абсолютных путей для ваших ресурсов достаточно:

<link rel="stylesheet" type="text/css" href="/project/style.css" >
<img src="/project/images/web/showreel.png" alt="Image1" />

Обратите внимание на символ / в начале.Вам не нужны имя хоста и часть http.

Чтобы избежать различий в абсолютных URL между разработкой и производством, вы можете сделать простую вещь.Включите виртуальные хосты в конфигурации Apache и создайте виртуальный хост для каждого из ваших проектов.Таким образом, вам не нужно использовать эту структуру в вашей среде разработки:

http://localhost/project1
http://localhost/project2

, но вы можете использовать URL-адреса, подобные этим

http://project1/
http://project2/

Таким образом, ваша проблема решена иВы можете использовать URL-адреса как /images для своих ресурсов.

Чтобы включить виртуальный хост для apache, вам нужно настроить DNS-настройку для своей машины, добавив эти строки в /etc/hostsфайл

127.0.0.1 project1
127.0.0.1 project2

и вам нужно будет создать соответствующих виртуальных хостов

1 голос
/ 02 декабря 2011

Поместите это в заголовок документа:

<base href="http://domain/project/" />

Это необходимо, потому что браузер клиента не может узнать переписанный URL, он известен только на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...