HTaccess - косая черта + .php + якоря (ExpressionEngine) - PullRequest
0 голосов
/ 14 июля 2011

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

Моя проблема: в .HTACCESS есть перенаправляющая косая черта, но мои пользователи должны иметь доступ только к одной странице .php ( www.mydomain.com / mobile / index.php ), но ссылка перенаправляется на / index.php / , другая проблема заключается в том, что якоря меняются таким же образом ( www.mydomain.com / somepage / # anchor1 ) на / # anchor1 /

Так что мой вопрос ... есть ли способ поместить исключение в конечный код перенаправления косой черты? Я имею в виду, я просто должен исправить это в нескольких страницах. Обратите внимание, что наш механизм выражений удаляет все index.php, чтобы иметь такие ссылки, как www.mydomaine / contact /, www.mydomaine / about /, www.mydomaine / infos /, ect.

В настоящее время код трейлинга htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^(.*)$ $1/ [L,R=301]

P-S: у нас есть код, который тоже удаляет index.php:

RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5})$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/(members|P[0-9]{2,8}) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]

Спасибо за помощь!

1 Ответ

1 голос
/ 15 июля 2011

Существует ли действительная причина, по которой необходимо завершать косые черты в URL-адресах необходимо применить? Если нет, я просто удалил бы правило перезаписи, и ваша проблема решена:)

Большинство URL-адресов ExpressionEngine будут работать с или без конечных слешей.

Самым простым решением этой проблемы будет удаление чрезмерного перенаправления конечного слеша и его замена более спокойной версией:

<IfModule mod_rewrite.c>
    # Enable Apache's RewriteEngine
    RewriteEngine On

    # Add Trailing Slashes to URLs
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+[^/])$ /$1/ [R=301,L]

    # ExpressionEngine Remove index.php from URLs
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule> 

Используя приведенный выше код, example.com/mobile/index.php не будет перезаписан в example.com/mobile/index.php/, а также страницы с якорями example.com/page/#anchor1.

EE - нет.Знайте разницу между URI, такими как /mobile против /mobile/, приложения веб-аналитики и поисковые системы могут рассматривать эти отдельные веб-страницы.Если вы разрабатываете статический веб-сайт, это не имеет большого значения, потому что, если вы попытаетесь перейти на первый URI (без косой черты), Apache автоматически перенаправит клиента на последний (с косой чертой).

Но для веб-приложения, такого как EE, где все в URI после index.php обрабатывается приложением , а не Apache , это перенаправление остается на ваше усмотрение.Точно так же, как решение использовать или не использовать поддомен www, не имеет значения, выберете ли вы конечный слеш или наоборот;просто важно, чтобы вы применяли одно или другое.

Sidenote: в EE1 конечные слеши генерируются в URL-адресах, создаваемых ExpressionEngine;в EE2 косые черты не генерируются.Исключением является Структурный модуль , который выводит URL с косой чертой в EE1 и EE2 .

...