Jump to content
  • 0

mod_rewrite. Добавление конечного слэша


Bolmazov
 Share

Question

Здраствуйте, все! )

Я хотел бы решить, казалось бы, простенькую задачку: В .htaccess написать правило для добавления (редиректом) конечного слэша в url и одновременно загрузку index.php независимо от url, но тщетно, прошу вашей помощи.

Вот мой горе-код:

RewriteEngine On
RewriteBase /

#Если url не заканчивается на "/"
RewriteCond %{REQUEST_URI} .+[^/]$
#то добавить его и выполнить редирект
RewriteRule (.*) $1/ [R=301,L]

#Загрузить index.php
RewriteRule (.*) index.php

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

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

1.Если закоментировать последнюю строчку, то добавление конечного слеша происходить, но естественно не происходить загруска index.php

2.Если закоментировать строски "RewriteCond %{REQUEST_URI} .+[^/]$" и "RewriteRule (.*) $1/ [R=301,L]", то переадресация и добавление слэша происходит как "по маслу".

Link to comment
Share on other sites

  • 0

) Привет.

Смысл. Ну во-первых архитектура задуманного приложения должна иметь одну точку входа. Т.е. допустим при вводе url domain.ru/page/1/ (и любых других) будет загружен index.php, а переменная $_SERVER['REQUEST_URI'] (к примеру) попрежнему будет содержать domain.ru/page/1 и адресная строка останется domain.ru/page/1/ и уже в файл index.php (грубо говоря) решит как обрабатывать данный запрос. Это очень удобно для создания гипкого динамического приложения с ЧПУ.

Теперь про перенаправление. Это менее значимая вещь, но в совокупности с использованием одной точки входа (описанной выше) мне хотелось бы её реализовать. По нескольким причинам. Во-первых поисковик может проиндексировать страницу domain.ru/page/1/ и domain.ru/page/1 как разные, но с одинаковым контом. А редирект domain.ru/page/1 на domain.ru/page/1/ даст единообразия ссылок и перекинет весь вес страницы domain.ru/page/1 на domain.ru/page/1/. Об очевидности этого можно спорить, но я считаю так. Во-торых единообразие ссылок, как я сказал, это эстетически красиво. И последнее, как раз из-за того, что возможно обращение к domain.ru/page/1 при использовании RewriteRule (.*) index.php теряется возможность использования относительных ссылок. К примеру относительная ссылка script/ к domain.ru/page/1 будет domain.ru/page/script/, а ожидается domain.ru/page/1/script/

Надеюсь я на этот раз хоть немного понятен.

Ну это я выполнил вышу просьбу.

А какой ответ не мой вопрос? )))

Edited by Bolmazov
Link to comment
Share on other sites

  • 0
RewriteEngine On
RewriteBase /

#Если url не заканчивается на "/" и это не файл или директория
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} .+[^/]$
#то добавить его и выполнить редирект
RewriteRule (.*) $1/ [R=301,L]

#Обработать через index.php если запрашивается "виртуальный" путь
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)/$ /index.php [L]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy