Как вы что-то скрываете от URL с помощью htaccess - PullRequest
1 голос
/ 05 июня 2019

В моем приложении у меня есть интернет-магазин с несколькими предметами. Для каждого предмета вы можете выбрать разные цвета. Таким образом, цвета должны быть в URL, чтобы отправить его в качестве параметра.

В тот момент, когда вы нажимаете на элемент, вы получаете отправку на страницу этого элемента с URL http://cmsproject.local/item/2/nocolor.. nocolor - это то, что я хочу скрыть от URL, что в результате выглядит примерно так: http://cmsproject.local/item/2.

Если вы выбрали цвет, последняя часть URL выглядит так: " / 2136c7 ". Это не проблема и все равно должно выглядеть так. Только когда не выбран цвет, URL должен скрывать часть nocolor .

Я перепробовал несколько форумов, но ни один из них не сработал для меня. Я пробовал что-то вроде этого: RewriteRule ^ 2 / nocolor /(.*)$ $ 1 . и это RewriteRule ^ / 2 / nocolor [L] .

Мой файл htaccess выглядит так:

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteRule ^/2/nocolor [L]

При этом я ожидал, что URL-адрес «скроет» часть nocolor , вместо этого ничего не изменилось, и он не отображал никаких ошибок.

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Если я правильно понимаю ваши требования, я не думаю, что вам обязательно нужно обрабатывать это на уровне HTTP-сервера. Из того, что я понимаю, вы хотите URL, который может иметь необязательный параметр как его часть.

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

Вот пример того, как вы могли бы справиться с этим, демонстрируемый простым закрытием маршрута (это, конечно, может быть метод действия контроллера):

Route::get('item/{id}/{color?}', function ($id, $color = null) {
    // If the URL is "/items/2" then $color will be null
    // If the URL is "/items/2/2136c7" then $color will be '2136c7'
});

Используя приведенный выше пример, вы можете справиться с обеими ситуациями.

0 голосов
/ 05 июня 2019

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

RewriteRule ^/item/([0-9]+)/? /item/$1/nocolor
  • ^ начало матча
  • ?опционально
  • + хотя бы один случай

Посмотрите на RegEx для дальнейшего понимания.

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