SEO mod_rewrite внутренние проблемы каталога URI - PullRequest
0 голосов
/ 16 января 2012

У меня есть правило mod_rewrite, которое меняет example.com/en/about/topic на example.com/en/view.php?p=pages/about/topic.php

Мое правило:

RewriteRule ^ en / ([a-zA-Z0-9 /] +) $ en / view.php? p = pages / $ 1.php

view.php содержит все мои постоянные вещи, такие как меню, логотип и т. д., и использует php include для получения страниц / темы.php

Он работает на example.com/en/topic -> example.com/en/view.php?p=pages/topic.php, но когда я пытаюсь example.com/en/about/topic -> example.com/en/view.php?p=pages/about/topic.php, он находит view.php и pages/about/topic.php и загружает их, но пытается загрузить все мои css-файлы, изображения и т. д. из en/about/...вместо en/... Это делается для изображений как в view.php, так и topic.php.Самое разочаровывающее то, что если я добавлю [R] к правилу, все будет работать нормально, но это противоречит цели упражнения SEO!

Я был на этом весь день, но не повезло.Хотя я обнаружил ведение журнала mod_rewrite и пару удобных направляющих .

Вот что говорит мой журнал для example.com/en/test (который работает):

[perdir C: / tt / xampp / htdocs /] переписать 'en / test' -> 'en / view.php? P = pages / test.php'

[perdir C: / tt / xampp / htdocs /] strip префикс document_root: C: /tt/xampp/htdocs/en/view.php -> /en/view.php

[perdir C: / tt /Внутренний редирект xampp / htdocs /] с /en/view.php [ВНУТРЕННЕЕ НАПРАВЛЕНИЕ]

[perdir C: / tt / xampp / htdocs /] проходит через C: / tt / xampp / htdocs / en / view.php

[perdir C: / tt / xampp / htdocs /] проходит через C: /tt/xampp/htdocs/en/base/code/view.css

инапример example.com/en/about/test (чего нет)

[perdir C: / tt / xampp / htdocs /] переписать 'en / about / dir / test' -> 'ru/view.php?p=pages/about/dir/test.php'

[perdir C: / tt / xampp / htdocs /] strip префикс document_root: C: / tt / xampp / htdocs / en /view.php -> /en/view.php

[perdir C: / tt / xampp / htdocs /] внутреннее перенаправление с /en/view.php [ВНУТРЕННЕЕ НАПРАВЛЕНИЕ]

[perdir C: / tt / xampp / htdocs /] проходит через C: / tt / xampp / htdocs / en / view.php

[perdir C: / tt / xampp / htdocs /] проходит через C: / tt / xampp / htdocs / en / about

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 16 января 2012

Таким образом, вы задаете неправильный вопрос.Правило, которое вы даете, работает и делает то, что вы хотите.Ваша проблема в том, что сценарии выдают относительные адреса для вашего CSS, изображений и т. Д., Поэтому, когда браузер клиента запрашивает example.com/en/about/topic, который содержит относительную ссылку href="base/code/view.css", клиент преобразует это в

example.com/en/about/base/code/view.css

Учитывая, что вы не хотите изменять свои сценарии, ваша задача состоит в том, чтобы распознать этот тип шаблона и убрать лишние каталоги, которые вводит SEO-кодировка, поэтому, если этот случай example.com/en/<don't care>/base/code/..., тоследующий тип правил будет делать то, что нужно

RewriteRule en/.+?/base/code/(.*) en/base/code/$1   [L]

Заменить /base/code на любые подходящие вам шаблоны соответствия.

...