Подтвердить что ты не робот

Включить доступный для человека URL-адрес в .htaccess

Предисловие: Да, этот вопрос кажется дублированным, и я нашел связанные вопросы, но ответы оттуда не помогли мне.: (

Здравствуйте, я хочу добавить поддержку читаемых URL-адресов для моего PHP-проекта. На данный момент строка запроса URL выглядит так:

index.php?url=main/index

Я хотел бы сделать так:

index.php/main/index

Я читаю следующие статьи:

qaru.site/info/500454/...

Cheatsheet

qaru.site/info/500454/...

qaru.site/info/500454/...

Но когда я это делаю:

var_dump($_GET['url']); // get empty array

получите пустой массив, например, не добавлен параметр url.

Мой текущий .htaccess:

DirectoryIndex index.php

Options +FollowSymLinks

RewriteEngine On

RewriteBase /
RewriteRule ^(.*)$ index.php?url=$1 [NC]

Может кто-нибудь мне помочь? Спасибо!

4b9b3361

Ответ 1

URL: http://domain.com/index.php/controller/action

Переписанный URL: http://domain.com/index.php?url=controller/action

.htaccess

DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

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

Пояснение:

.* в шаблоне ^index.php/(.*)$ соответствует всем после index.php/ по входящему URL. Скобки помогают захватить часть как переменную $1, которая затем добавляется в конце URL-подстановки /index.php?url= + $1.

[L, QSA]: L игнорировать другие правила перезаписи, если это подходит. QSA означает добавление строки запроса.

Ответ 2

У вас есть

index.php?url=main/index

Юо хочет переписать (а затем перенаправить пользователя) на этот

index.php/main/index

Как насчет этого?

DirectoryIndex index.php

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{QUERY_STRING} ^url=([a-z]+)/([a-z]+)$
RewriteRule ^.*$ http://mydomain.site/index.php/%1/%2 [R=302,L]

R = 301 или 302 зависит от вашей потребности

В этом примере я предположил, что на исходном url есть только символы a-z. Просто чтобы уточнить (из-за того, что в целом процесс обратный), таким образом пользователи будут перенаправлены, эти правила не преобразуют ссылки на вашу страницу.

Ответ 3

В строке RewriteRule ^(.*)$ index.php?url=$1 [NC] (. *) соответствует части URL-адреса до '?' где начинается запрос.
Чтобы использовать значения, переданные в запросе, вам нужен флаг QSA. Добавляет строку запроса.

Ответ 4

введите описание изображения здесь Попробуйте приведенный ниже код, Только для индекса .php вы можете заменить его согласно вашему требованию. Дайте мне знать, если вам нужна дополнительная помощь.

DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine ON
RewriteBase /
RewriteRule ^(index\.php)/([0-9a-zA-Z\/_-]{1,99}) index.php?url=$2

Что сработало для меня:   <?php var_dump($_GET); ?> Это единственное, что я сделал на url http://localhost/baba.php/abcd. и оригинальный файл .htaccess

DirectoryIndex baba.php RewriteEngine ON RewriteBase / RewriteRule ^(baba\.php)*/([0-9a-zA-Z\/_-]{1,99}) baba.php?url=$2

Ответ 5

Если ваш URL: www.abcd.com/index.php/abcd/...

.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Ответ 6

Пожалуйста, попробуйте это, я думаю, решит вашу проблему, если вы используете этот код.

RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php