Как изменить ссылку на файл в подкаталоге, чтобы он был доступен из корневого каталога? - PullRequest
0 голосов
/ 06 апреля 2019

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

http://localhost/index.php

Но остальные страницы находятся в подкаталоге, например:

//What the current link is
http://localhost/pages/page.php

//What I want the link to be
http://localhost/page.php

Некоторые из моих страниц находятся в подкаталогах подкаталога следующим образом:

//What the current link is
http://localhost/pages/page1/page.php

//What I want the link to be
http://localhost/page1/page.php

Как видите, я просто хочу исключить основной подкаталог из ссылки, а это pages.

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

1 Ответ

0 голосов
/ 07 апреля 2019

Вы, конечно, не найдете идеальное решение, вы можете просто скопировать и вставить для решения всех ваших задач. Это ожидание странное. Вместо этого ожидается, что вы действительно поймете, как работают инструменты, которые вы хотите использовать, и сможете найти свое собственное решение. Для этого действительно достаточно хороших примеров здесь, на SO, и, кроме того, есть документация __excellent_ модуля переписывания apache, доступная всего двумя щелчками мыши.

В любом случае, это предложение, вам, возможно, все же придется подстроить его под вашу ситуацию:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)$ /pages/$1 [END]

В случае, если вы получили внутреннюю ошибку сервера (http status 500), используя приведенное выше правило, есть вероятность, что вы используете очень старую версию apache http server. В этом случае вы увидите определенный намек на неподдерживаемый флаг [END] в файле журнала ошибок http-серверов. Вы можете попробовать обновить или использовать более старый флаг [L], он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.

Это правило также будет работать в конфигурации хоста http-серверов или внутри файла динамической конфигурации (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете динамический файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация была включена вообще в конфигурации хоста и чтобы он находился в папке DOCUMENT_ROOT хоста.

И общее замечание: вам всегда следует размещать такие правила в конфигурации хоста http-серверов, а не использовать файлы динамической конфигурации (".htaccess"). Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

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