Как переписать URL, чтобы убрать вопросительный знак
У меня есть строка запроса, которая изменяет содержимое страницы, в зависимости от того, что пользователь вводит после вопросительного знака в URL.
Будет ли загружать контент, назначенный для идентификатора 3
Загружает контент, назначенный 34.
Что мне нужно ввести в мой файл .htaccess, чтобы при переходе пользователя в
Он загружает контент, который будет загружен, если пользователь вошел
По сути, я хочу очистить URL-адрес и удалить знак вопроса. Спасибо. (Я понимаю, что это основной вопрос)
2 ответа
Поскольку ваш javascript уже обрабатывает часть URL, вам не нужен htaccess. Javascript принимает строку запроса, например ?OdfgzaBv2qY , удаляет вопросительный знак и помещает остаток OdfgzaBv2qY в качестве идентификатора в iFrame.
Поскольку JavaScript использует window.location.search , сценарий ожидает установки переменных после вопросительного знака в URL. Так что www.mysite.com/?3 будет работать, но когда вы посетите www.mysite.com/3, это не сработает, потому что window.location.search остается пустым.
Причина, по которой htaccess не является решением, заключается в том, что htaccess обрабатывается на стороне сервера, а JavaScript обрабатывается на стороне клиента. Даже если htaccess работает, и вы перенаправлены на index.html?3 , JavaScript по-прежнему видит URL-адрес www.mysite.com/3, а не окончательный запрос. В общем, сервер понимает, что в фоновом режиме переменная имеет значение? 3, но javascript видит то, что видит пользователь: удобный URL без вопросительного знака.
Изменить — можете ли вы попробовать?
Window.location.pathname СЛЕДУЕТ взять /3 и заменить / . Принимая во внимание, что window.location.search принимает ?3 часть и заменяет ?
Если кому-то нужен запуск до htaccess
Основной файл .htaccess для этого будет:
Конечно, index.php? следует заменить любой страницей, которую вы используете для выполнения запроса.
- правило начинается с ^, а затем ищет числовое значение за базовым URL, поэтому на случай, если у вас есть http: / /www.domain.com/42 правило начинается сразу после последнего /
- $ Определяет конец регулярного выражения правила.
- index.php? 1 — это URL-адрес, который должен быть загружен (где $ 1 — это параметр 1: ([0-9]+) )
- [L] — флаг «Последний», который указывает, что htaccess не должен искать другие правила, которые применяются
Обратите внимание, что это не работает для http://www.domain.com/49/. поскольку косая черта в конце не совпадает. Это может быть сделано:
Сначала проверяется, есть ли косая черта, если это так, он перенаправляет на URL без «косой черты» (R = 301: Redirect 301 = постоянное перенаправление), а затем соответствует 2-му правилу и выполняет запрос.
Источник
.htaccess — убрать знак вопроса из ссылки
Помощь в написании контрольных, курсовых и дипломных работ здесь.
знак вопроса
что означает знак вопроса вот здесь: double gcd (int x, int y ) < return (( y == 0) ? x : gcd.
что значит знак вопроса в записи
"Пусть Х — некоторая задача, Х ? Rm. Рассмотрим две геометрические конструкции, связанные с Х. ".
Знак вопроса после типа переменной
public int? TeamId < get; set; >Зачем здесь знак вопроса
Что дает знак вопроса после типа?
помогите понять синтаксис член абстрактного класса объявлен так: bool? isABC; имя — не суть.
Если у тебя ссылка на писана с "?", то так она и будет. Во-первых, надо ссылки отредактировать, привести к виду http://example.ru/page/2 как я понимаю мы хотим посмотреть вторую или третью страницу из списка (даже если не так, смысл тот же). Потом надо прописать правило в .htaccess
Проблему решил по такой статье <ссылка удалена>. Всем спасибо отписавшимся тут.
ссылка>
Добавлено через 2 часа 39 минут
Поскольку ссылку удалили, я запощу так. Может кому поможет.
Всё чаще на форуме стали появляться вопросы, связанные с ЧПУ (Человекопонятный УРЛ).
В принципе, ничего нового и оригинального в идее понятного УРЛа нет. Про это писал и Лебедев, и другие товарищи. Вообще, мне всегда нравились УРЛы такого, например, вида: site/forums/33 . Есть несколько способов реализации задуманного:
1. Создавать подпапки в соответствии с нужной нам структурой сайта. Для форумов и других генерируемых ресурсов, естественно, этот вариант не подходит.
2. Используем возможности страницы ошибок. Когда с сервера запрашивается несуществующая страница, сервер выдает 404 код ответа. Идея заключается в том, что бы прописать в фале .htaccess страницу, которая будет выдаваться при ошибке 404, а уже эта страница будет смотреть на текущий УРЛ и выдавать нужный документ, То есть, в .htaccess пишем:
Пользователь набирает site/forums/33, такая страница не найдена, и загружается файл index.php. Дальше — все просто. Переменная $_SERVER["REQUEST_URI"] дает нам адрес вызываемой страницы (в данном случае это будет /forums/33), как вывести на экран соответствующий документ — будет описано чуть ниже.
Этого мало. В некоторых браузерах и с поисковиками такой фокус не пройдет: страница 404 будет выдавать соответствующий код, и страницы индексироваться не будут. Поэтому надо, чтобы страница, которая грузится в случае ошибки 404, изменяла бы код ошибки и сигналила, мол, все ОК, есть такая страница: <?php header("http/1.1 200 Ok"); ?>
Итого: прописываем в .htaccess страницу, которая, собственно, за все отвечает (у меня это index.php). В этой странице пишем php-скрипт, который работает с $_SERVER["REQUEST_URI"], шлет заголовок «http/1.0 200 Ok» и отображает то, что надо.
3. Для этих (и не только) целей есть специальный модуль в Апаче, который называется mod_rewrite (для работы модуля, в httpd.conf должна быть раскомментирована строчка "LoadModule rewrite_module modules/mod_rewrite.so"). Он позволяет «переписывывать урлы», то есть, преобразовывать их «на лету» по правилам, которые вы ему опишите.
Это очень мощный модуль, и если вы в нем разберетесь, то сможете творить чудеса. читайте документацию, благо, что ее полно, я лишь покажу, как реализовывал сам :
в .htaccess пишется код:
, который проверяет, существует ли запрошенный адрес, если нет — перебрасывает на Index.html (если нет — index.php). В index.php, так же, как и в п.2, мы разбираем строку $_SERVER["REQUEST_URI"] :
В массиве $url у нас теперь содержатся параметры, переданные в строке браузера, этот массив нам заменяет массив $_GET .
Источник
Как сделать 301-редирект?
Введение. Правила приведены для сервера Apache. В правилах: %
или иного правила для редиректа определяется тем, попадает URL-адрес страницы под это правило или нет. О значении тех или иных
обозначений (^, $, NC и т.д.) см. памятку в конце страницы.
Проверка кода ответа. Быстрая и бесплатная проверка кодов ответа для списка URL в режиме онлайн реализована в рамках комплекса инструментов «Пиксель Тулс», предусмотрено удобное цветовое кодирование и загрузка URL файлом.
Анализ проведён с помощью инструментов в сервисе Пиксель Тулс.
Ниже даны наиболее используемые правила настройки файла .htaccess для 301-редиректа. Лучше размещать все правила после двух строк:
Options +FollowSymLinks
RewriteEngine On
Комментарий в файле обозначается символом решётка «#» в начале строки #
# Текстовый комментарий, данная строчка не будет обрабатываться.
301-редирект с домена без WWW на домен с WWW префиксом #
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
С домена с WWW префиксом на без #
RewriteCond %
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://pixelplus.ru/$1 [R=301,L]
Стандартная переадресация с одной статической страницы на другую #
Redirect 301 /was.php http://www.site.ru/new.php
При этом, новый адрес указывать необходимо полностью с http и доменным именем.
В ряде случаев полезна переадресация через RewriteRule #
RewriteRule ^dir /dir-new/$1 [R=301,L]
301-редирект для страницы с GET параметрами #
Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
301-редирект со страницы без заданного параметра в корень #
Если адрес имеет следующий вид: http://www.site.ru/?abc то для перенаправления подойдет последовательность строчек:
RewriteCond %
RewriteRule ^$ /? [R=301,L]
301-редирект для конкретного файла, а не целой папки #
Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.
RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]
Как быть с доменами в зоне РФ? #
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф преобразуется в .xn--p1ai.
301-редирект с домена на домен #
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
Настройка переадресации на папки со слешем в конце / #
Настройка переадресации на папки без слеша (убираем слеш в конце) #
301-редирект с домена на папку на другом домене #
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
Редирект со всех файлов домена, кроме папки администратора bitrix #
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
Редирект всех файлов в папке на заданный файл #
RewriteRule ^dir(.*)$ /new-file.php [L,R=301]
Редирект файлов из заданной папки кроме, определенного файла #
RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301]
RewriteRule ^dir(.*)$ /all.php [L,R=301]
Смена страниц с html расширения на php расширение #
RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php
Перенос картинок / изображений из папки /img/ на поддомен #
RewriteRule ^img/(.+)\.jpg$ http://img.domain.ru/$1.jpg [R=301,L]
Задание типа индексной страницы (php, html, htm и другие) #
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
DirectoryIndex index.html index.php index.htm index.shtml
Редирект с индексной страницы php на саму папку (корень) #
RewriteCond %
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
Для всех индексных страниц на сайте:
RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
Редирект с поддомена на основной домен второго уровня #
RewriteCond %
RewriteRule ^(.*)$ http://site.ru%
Редирект для заданного файла в различных директориях (папках) #
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
Код позволяет поставить 301-редирект со всех папок вида http://site.ru/***/uniqe-file.html на один файл в корне /unique-file.html. Бывает полезен при переделке сайта и изменении ссылок.
Если требуется создать ЧПУ-копию какой-либо динамической страницы, то это можно также реализовать с помощью .htaccess. #
RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]
Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/
301-редирект с HTTPS-версии на HTTP #
Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.
Перенос сайта на версию с HTTPS (для всех страниц) #
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Настройка 403 кода ответа сервера для реф-спама (301-редирект для спама по REFERER) для списка ресурсов #
RewriteCond %
RewriteCond %
RewriteRule .* — [F]
Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER.
Указание пути к файлу 404 ошибки с помощью .htaccess #
Внимание, важно чтобы код ответа сервера для 404 ошибки был именно 404. Путь к файлу указывается с помощью следующей строчки:
ErrorDocument 404 /404-for-me.php
! Все правила выполняются в прямом порядке их следования в файле .htaccess и правило, написанное позже, и будет выполняться позже.
! Для сайтов, на которых используется не сервер Apache, аналогичные 301-редиректы легко настраиваются с помощью PHP.
! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.
Если требуется настроить редирект только для некоторых USER_AGENT’ов, а не для всех пользователей #
RewriteCond %
RewriteRule (.*) http://mobile.site.ru/ [L,R=301]
Если требуется настроить редирект для всех поисковых роботов (представлен список их USER_AGENT’ов) #
RewriteCond %
RewriteRule (.*) http://no-search.site.ru/ [L,R=301]
Несколько простых примеров #
Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/
RewriteCond %
RewriteRule ^component/content/$ /? [R=301,L]
Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/
RewriteCond %
RewriteRule ^index\.php$ /? [R=301,L]
Синтаксис для регулярных выражений #
. — Точка заменяет произвольный символ.
[abc] — обозначает перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
* — означает, что предшествующий символ может повторяться (0 или более раз).
[abc]* — команда найдёт идущие подряд символы из заданного набора.
[^abc]* — с точностью до наоборот.
.* — заменяет абсолютно любой набор символов. «.*» — найдёт все подстроки между кавычками.
^ — начало строки (в том случае, если используется в начале выражения).
$ — обозначает конец строки.
\w — буква, цифра или подчёркивание _.
\d — заменяет любую цифру.
\D — заменяет любой символ, но не цифру.
[0-9] — заменяет любую цифру.
[a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
[A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
[a-zA-Z] — любая буква от a до Z в любом регистре.
[a-Z] — то же самое.
Убираем все GET-параметры после знака вопроса (?) #
RewriteRule (.*) $1? [R=301,L]
Располагать после: RewriteBase /
Памятка по используемым символам и обозначениям
Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.
- ^ — спецсимвол начала строки;
- $ — спецсимвол конца строки;
- ! — спецсимвол отрицания;
- . — точка, заменяет любой символ, но только один;
- () — группировка;
- \ — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом;
- # — начало текстового комментария в файле.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
- ? — символ повторяется 0 или 1 раз.
- + — повторяется от 1 до 65536 раз.
- * — повторяется от 0 до 65536 раз.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
Источник
Слеш в конце и знак вопроса в URL
Т.е. при обращении сервер считывает URL по которому обращается пользователь и выдает ответ в виде страницы, верно?
Нужно ли в ссылках в таком случае писать в конце слеш, ведь при этом для сервера формируется единый и правильный адрес, верно?
И ещё вопрос про знак вопроса в URL. Допутсим ли он?
Смотрел в RFC 1738, не разобрался сходу.
Какие знаки недопустимы в URL и почему они конвертятся в %.
Нашел ответ на форуме, что лучше слеш в конце ставить. Т.е. насколько я понимаю, при обращении пользователя идет запрос, далее выдается ответ от сервера. Соответственно, если запрос сформирован некорректно, то в таком случае, при таки правильном со стороны пользователя запросе сервер выдает повторный ответ.
Верно ли утверждение:
запрос смотрится до знака «?»
все что после него — это параметры
то есть слеш будет влиять только на ту часть. которая до «?»
при адресе ссылки: адрессайта.ру/?страница-на-сайте
Всё, что после «адрессайта.ру» и до «?» — это путь.
Если в качестве пути указан только «/» или название директории (но не файла), и при этом нет никаких правил RewriteRule, то сервер берёт из этой директории интексный файл по-умолчанию (например, index.php).
Всё что после «?» — это строка запроса.
Вообще, серверу абсолютно по-барабану, как выглядит запрос, сколько в нём слэшей и различных символов.
Он или находит скрипт (или файл) с соответствующим именем (в том числе, с помощью правил RewriteRule) или не находит. Если находит, то выполняет и отдаёт результат пользователю.
Источник