Рейтинг:2

использовал двоеточие для URL htaccess http://localhost/1:1

флаг cn

У меня проблема с двоеточиями, используемыми в URL

это мой адрес

http://локальный/1:1

это мой htaccess

RewriteEngine включен
Правило перезаписи ^/(.*):(.*) index.php/$1:$2

эта ошибка показывает Запрещено У вас нет разрешения на доступ к /1:1 на этом сервере.

# Виртуальные хосты
#
<Виртуальный хост *:80>
  имя_сервера
  Псевдоним сервера
  DocumentRoot "${INSTALL_DIR}/www"
  <Каталог "${INSTALL_DIR}/www/">
    Опции +Индексы +Включает +FollowSymLinks +MultiViews
        РазрешитьПереопределить все
        Заказать Разрешить, Запретить
        Разрешить от всех
  </Каталог>
</ виртуальный хост>
Michael Hampton avatar
флаг cz
Проверьте журнал ошибок Apache.
Рейтинг:1
флаг kz

Тут есть несколько проблем...

  1. В каталоге .htaccess контекст, URL-путь, соответствующий Правило перезаписи шаблон никогда не начинается с косой черты, поэтому регулярное выражение ^/(.*):(.*) никогда не будет совпадать, и директива ничего не делает. Итак Правило перезаписи шаблон нужно было бы ^(.*):(.*) - без префикса косой черты.

    • Однако это регулярное выражение очень генеральный и, скорее всего, слишком много совпадает. Если вы ожидаете запрос формы /1:1, т.е. /<число>:<число> затем используйте более конкретное регулярное выражение, например. ^\д+:\д+$
  2. Поскольку вы получаете 403 Forbidden (в отличие от 404 Not Found), я предполагаю, что вы находитесь на сервере Windows. "проблема" здесь в том, что : (двоеточия) не являются допустимыми символами в именах файлов Windows. Это проблема с .htaccess потому что запрос сопоставляется с файловой системой до .htaccess (и mod_rewrite) обрабатывается — в этот момент срабатывает ошибка 403. Вместо этого вам нужно будет переписать запрос в конфигурации основного сервера (или в контейнере VirtualHost), что происходит перед запрос сопоставляется с файловой системой.

Итак, что вы пытаетесь сделать... перепишите запрос, содержащий двоеточие, используя .htaccess на сервере Windows невозможно. Вы можете сделать это в Linux (который разрешает двоеточие в именах файлов) ИЛИ в конфигурации основного сервера (сервер или же виртуальный хост контекст) в Windows, но не в .htaccess.

При использовании mod_rewrite в сервер (или же виртуальный хост) контекст (в отличие от .htaccess) ты делать нужен префикс косой черты (на обоих шаблон и замена струны). Например:

# В контексте "сервер" (или "виртуальный хост")
# не ".htaccess" (или раздел "<Directory>" в конфигурации сервера)

RewriteEngine включен

# Внутренне переписать "/1:1" в информацию о пути на "index.php"
Правило перезаписи ^/\d+:\d+$ /index.php$0 [L]

$0 обратная ссылка содержит полный URL-путь, захваченный Правило перезаписи шаблон. Сюда входит префикс косой черты (при использовании в сервер контекст), поэтому косая черта опущена в замена нить.


ОБНОВИТЬ:

Я внес изменения, пожалуйста, посмотрите на мой вопрос еще раз и убедитесь, что я ввел его правильно.

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride all
        Order Allow,Deny
        Allow from all
  </Directory>
</VirtualHost>

Кажется, вы не внесли никаких изменений; хоть не в том разделе? Как упоминалось выше, эти директивы должны быть добавлены непосредственно в <VirtualHost> контейнер (который вы разместили). Их нельзя добавить в .htaccess файл в ОС Windows - они просто ничего не сделают, и вы получите ответ 403 Forbidden, как указано.

Сказанное выше должно быть написано так:

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"

  # Enable the rewrite engine in a virtualhost context
  RewriteEngine On

  # Internally rewrite "/1:1" to path-info on "index.php"
  RewriteRule ^/\d+:\d+$ /index.php$0 [L]

  <Directory "${INSTALL_DIR}/www/">
    Options -Indexes -Includes +FollowSymLinks -MultiViews
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>

Вам нужно будет перезапустить Apache, чтобы эти изменения вступили в силу. (В отличие .htaccess файлы, которые интерпретируются во время выполнения.)

Однако какие еще директивы у вас есть в .htaccess и как маршрутизируются другие ваши URL-адреса? Вы разместили следующую директиву в комментариях:

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Это направляет URL-адрес совершенно иначе, чем то, что вы запрашиваете в своем вопросе. В своем вопросе вы передаете URL-путь в качестве дополнительной информации о пути к index.php. Однако в этой директиве вы передаете URL-адрес как часть строки запроса? Как это соотносится? Почему они разные? Очевидно, вам нужно передать URL-адрес так, как ожидает ваше «приложение MVC».

amir shariflou avatar
флаг cn
Большое спасибо за публикацию и комментарии к этому руководству для меня, но это решение тоже не сработало. Да, я хочу эту инструкцию для использования в Vamp Server.На виртуальном хосте Linux, если возможно, я попробую один раз. Пытаться
amir shariflou avatar
флаг cn
Вернее, какие инструкции я могу получить от двоеточий в параметрах? У тебя есть решение? это моя ошибка (сервер Apache/2.4.37 (Win64) PHP/7.0.33 на локальном порту 80)
флаг kz
Решение (обходной путь), которое я опубликовал выше, должно работать так, как написано. Я тестировал это на сервере Apache/Windows, используя `` контейнер в конфигурации сервера, и он работает так, как задумано... для передачи URL-пути (`/1:1`) как PATH_INFO в сценарий `/index.php` (который, похоже, это то, что вы пытались сделать в вашем вопросе). (Это не единственный способ передать URL-путь. Вы можете передать его как строку запроса или ничего не передавать и вместо этого проверить `REQUEST_URI`, но это зависит от того, что ожидает ваш сценарий.)
флаг kz
@amirshariflou Где именно вы используете эти директивы? Пожалуйста, добавьте соответствующие директивы сервера к вашему вопросу. Вы перезапустили Apache после изменения конфигурации сервера? "какие инструкции я могу получить от двоеточий в параметрах?" - Извините, я не уверен, что вы имеете в виду? Вы все еще получаете 403 Forbidden? Как ваш скрипт (`index.php`) рассчитывает прочитать URL-путь? "это моя ошибка" - я не вижу ошибки?
флаг kz
@amirshariflou Я обновил свой ответ, убрав дополнительную/ненужную косую черту в строке _substitution_. Хотя на самом деле это просто «уборка», на самом деле это не имеет никакого значения, «работает» он или нет.
amir shariflou avatar
флаг cn
Большое спасибо за ваше время, но моя проблема не была решена. Пожалуйста, напишите точный код для меня, чтобы узнать, что это такое. Я пробовал много способов, но это не сработало, но передача trap на хост Linux работает там без необходимости кода. Я не знаю, почему это мешает в wampserver - я даже решил использовать другой xampp. Но я знаю, что это нужно исправить с помощью кода в файле htaccess.
amir shariflou avatar
флаг cn
Смотрите этот адрес Я хочу сделать именно это - http://www.recitequran.com/1:1
флаг kz
@amirshariflou «Пожалуйста, напишите мне точный код» - код в моем ответе _является_ точным кодом. Однако вам нужно поместить его в правильное место в конфигурации вашего сервера (не `.htaccess`) и перезапустить сервер. Это зависит от того, как вы настроили свой сервер. Пожалуйста, добавьте соответствующие разделы конфигурации вашего сервера к вашему вопросу с этими директивами на месте - тогда я могу посмотреть и проверить. «Я не знаю, почему это беспокоит в wampserver» - как сказано в моем ответе, это ограничение ОС Windows, а не Apache.
флаг kz
@amirshariflou «Я знаю, что это нужно исправить с помощью кода в файле htaccess» - Нет. Как я уже говорил в своем ответе, вы не можете использовать для этого `.htaccess` (в Windows). Вам нужно поместить эти директивы в основной конфиг сервера (или ``контейнер).
флаг kz
@amirshariflou Какие еще директивы есть в вашем файле `.htaccess`? Как маршрутизируются другие URL-адреса?
amir shariflou avatar
флаг cn
Маршрутизация у меня из-за того, что я работаю с mvc php, и работаю по стандарту, но тут дело в том, что должно происходить в файле htaccess, чтобы при вводе адреса сервер wamp не выдавал ошибку и возвращал значения 1 : 1 в качестве параметра Попробуйте один раз на своей системе, очень важно, чтобы она работала.
amir shariflou avatar
флаг cn
Ошибка Запрещенный У вас нет разрешения на доступ к /1:1 на этом сервере. Apache/2.4.37 (Win64) PHP/7.0.33 Сервер на локальном хосте Порт 80
amir shariflou avatar
флаг cn
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
флаг kz
У вас есть доступ к конфигурации сервера Apache? `` контейнер, который _определяет_ ваш сайт? Пожалуйста, отредактируйте свой вопрос, чтобы включить эту информацию. «сервер wamp ** не ** делает ошибку» / «Ошибка запрещена, у вас нет разрешения на доступ»?! На каком сервере вы получаете ответ «Запрещено»?
amir shariflou avatar
флаг cn
Я внес изменения, пожалуйста, посмотрите на мой вопрос еще раз и убедитесь, что я ввел его правильно.
флаг kz
@amirshariflou Я обновил свой ответ. Однако нам также необходимо просмотреть содержимое вашего файла `.htaccess`, так как это может вызвать конфликты и вызвать дополнительные проблемы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.