.htaccess, надлежащая перезапись каталога и файла с тем же именем

На данный момент мой веб-сайт имеет несколько статических страниц, одна из которых является / портфелем. Среди прочего мой htaccess скрывает .html расширение. Я хотел бы добавить каталог портфеля, но я не хочу перемещать свою существующую страницу портфеля в каталог портфеля как индексный файл по умолчанию. Моя / страница портфеля является одним из моего Google sitelinks, и я боюсь, если это перемещено или если изменения URL в некоторым образом, Google будет полагать, что это совершенно новая страница.

Моя проблема состоит в том, после того как я добавляю/portfolio/каталог, каждый раз, когда я пытаюсь посетить исходную / страницу портфеля, запаздывающая наклонная черта автоматически добавляется, и она связывается с самим каталогом.

Я попробовал бесчисленные опции, один являющийся переписыванием/portfolio/к / портфелю, однако это создает бесконечный цикл. Я также попробовал "DirectorySlash Прочь", но который только удалил запаздывающую наклонную черту будучи в каталоге, это не вернулось доступ к исходной / странице портфеля.

В конечном счете я хотел бы сохранить свою / страницу портфеля как есть, связываясь со страницами в каталоге как так/portfolio/example и если к или / портфелю или/portfolio/получат доступ, то это приведет к показу той же страницы, которая является за пределами каталога без Google, думая, что это - дублирующееся содержание.

Подобный вопрос существует здесь: .htaccess перезапись URL к странице или каталогу, хотя это все еще привело к бесконечному циклу для меня по некоторым причинам, я - предположение, это имеет некоторое отношение к скрытым расширениям.

Вот мой htaccess-

RewriteEngine On

# HTML to PHP
RemoveHandler .html .htm
AddType application/x-httpd-php .htm .html

# Hide extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

# Force WWW
RewriteCond %{HTTP_HOST} ^mydomain\.net
RewriteRule ^(.*)$ http://www.mydomain.net/$1 [R=301,L]

# Blog Subdomain
RewriteCond %{HTTP_HOST} ^blog.mydomain.net$
RewriteRule ^(.*)$ http://www.mydomain.net/blog/$1 [R=301,L]

Я знаю, что это не прекрасная идея, имеющая каталог с тем же именем как статическая страница, но я действительно не изменил бы существующую страницу и потерял бы Google sitelink, таким образом, чистым и надлежащим способом обработать это была бы справка.

11
задан Community 23 May 2017 в 12:25
поделиться

1 ответ

Здесь есть две ошибки, и два способа исправить это.

Во-первых, apache «выясняет», что существует каталог с именем «портфель», прежде чем будут применены условия перезаписи. Это означает, что условия перезаписи получают «портфель /» вместо «портфель».

Во-вторых, правило "! -D" специально предотвращает перезапись, которую вы хотите сделать, если действительно существует каталог с таким именем.

Решение 1. Вручную перенаправьте запросы для каталога портфолио, чтобы удалить слэш.

# Manually re-route portfolio/ requests to portfolio
RewriteCond %{REQUEST_FILENAME} portfolio/$
RewriteRule ^(.*)/$ $1 

# Hide extension
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

Обратите внимание на удаление условия "! -D".

Обратной стороной этого является то, что вам необходимо жестко закодировать крайний случай «портфолио» непосредственно в правилах перезаписи, и это все равно приведет к тому, что браузер будет сначала перенаправлен на портфолио /

Решение 2: Отключить DirectorySlash и удалить каталог существует test

# Disable Automatic Directory detection
DirectorySlash Off

# Hide extension
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

Установка DirectorySlash Off лучше всего решит эту проблему, но может нарушить работу других частей вашего сайта, где вам действительно нужен автоматический DirectorySlash. Удачи, надеюсь, это поможет.

Обратите внимание, что при тестировании решения 2 ваш браузер может запомнить перенаправление «портфолио» на «портфолио /» и выполнить перенаправление еще до того, как отправит запрос на сервер. Для получения наилучших результатов обязательно проверяйте в чистой среде с чистым кешем.

14
ответ дан 3 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: