62: How to Remove the File Extension and Variables From the URL | Remove .php in URL | PHP Tutorial

Поделиться
HTML-код
  • Опубликовано: 7 янв 2025

Комментарии •

  • @matttepp3038
    @matttepp3038 6 лет назад +14

    Watching Daniel teaching php, feels like when I started programming in late 2015, thanks to your videos.

  • @nancyfazal2536
    @nancyfazal2536 6 лет назад +6

    Hei...I just felt blessed to found your tut on youtube...No one ever taught like you...Bundle of thanks

  • @antonshelkovnikov1400
    @antonshelkovnikov1400 3 месяца назад +1

    Worked like a charm. Thank you!

  • @TheLeontheking
    @TheLeontheking 6 лет назад +42

    hell that htaccess has some annoying syntax..

  • @gustavinus
    @gustavinus Год назад

    Neat stuff. I will use it to rewrite .html files to .php files and also to remove the .php files from the URL. All while still being able to parse legacy links that used the old URLs.

  • @idHawk
    @idHawk 5 лет назад +3

    THANK YOUUUUUU!! I've been looking for this exact tutorial for ages.

  • @joelnjoroge7202
    @joelnjoroge7202 11 месяцев назад +1

    If your script doesn't load javascript and css when you redirect using htaccess as shown here, it is because the location of this files were not found by the server. You can add this tag in your html head section of your script: or just incase you are not in a particular custom folder (i.e if you are in xampp/htdocs/ or if you are on a server you are on home/public_html/).
    Make sure the paths to your files are correctly written

  • @VietLe-eq3yk
    @VietLe-eq3yk 3 года назад +1

    After all day searching, you saved me !

  • @codeseven8247
    @codeseven8247 4 года назад

    nice bro! Your my idol in your every explanation, it so clear and understable! keep up.... May God Guide you..

  • @ahmedjubayer5419
    @ahmedjubayer5419 6 лет назад +4

    you are the best bro! i have been watching your php tutorial for month & today is the last episode .nobody teaches as clearly as you taught.i just want you to know i learnt php from you! thank you so much! i know php,java script,html,css nd boostrap ! will you suggest me a book or some thing ! or should i start doing web devoulopment project on my own to check out and improve my skill!? once again ! thank you so much!

  • @Ditzj
    @Ditzj 2 года назад

    Thanks, just what I needed for a specific part of my project.

  • @williepietersen4707
    @williepietersen4707 2 года назад

    Explained very well. Exactly what I needed.

  • @Abhishek-iq1es
    @Abhishek-iq1es 3 года назад +1

    Thank You So Much
    Your Are Really Helping

  • @webcodefun1740
    @webcodefun1740 3 года назад

    Brilliant, thanks, well explained. Now off to try and implement!

  • @HomelessDeamon
    @HomelessDeamon 5 лет назад

    the lesson is wonderfully done and only lacks proper httpconf editing for when nobody managed to run .htaccess, but in this case this part deserves to be made in its own ova, i mean episode :D thanks teacher i always learn and get updated a lot from this channel.

  • @olekristianmller-hansen4220
    @olekristianmller-hansen4220 4 года назад +9

    Hello, Daniel. Thank you for the tutorial. Do you know how I would check if the requested URL contains any file with the extension "php" and responds with HTTP code 403? I want to make my Apache web server respond with 403 Access Denied to any request for a .php-file regardless if that file exists or not.

  • @mak0sh
    @mak0sh 4 года назад

    Thank you bro, you have saved my life!

  • @peterkim9696
    @peterkim9696 4 года назад

    Thanks a lot i was looking for this tutorial for a long 😍😍😍

  • @Mutlaq777
    @Mutlaq777 5 лет назад +1

    ..
    Thank you
    This tutorial is very helpful with short URL script ❤️.

  • @sujeetk2
    @sujeetk2 4 года назад

    Thanks Bro, great help. God Bless You!

  • @joselepcha4147
    @joselepcha4147 3 года назад

    Thank u for your selfless work 🙏

  • @MrSachinRawat
    @MrSachinRawat 2 года назад

    You are amazing 👍

  • @michaschmitt8963
    @michaschmitt8963 6 лет назад

    Best programming youtuber :-)

  • @manuelh7625
    @manuelh7625 5 лет назад

    Thank you for the detailed explanation!

  • @shanemoe9098
    @shanemoe9098 6 лет назад

    nice nice! this video saves me. Thanks mmtuts!

  • @uniquechannel3086
    @uniquechannel3086 5 лет назад

    This was very helpful thanks

  • @drakogemini5257
    @drakogemini5257 6 лет назад

    Great tutorial bro.

  • @JurinoH
    @JurinoH Месяц назад

    Hi Dani, It works very well. I got all the information from the url to show my page, but I loss all CSS styles. How can i fix that? Thanks

  • @matiullahzadran3971
    @matiullahzadran3971 5 лет назад

    thank you it was useful

  • @tinsld
    @tinsld 4 года назад

    Thank you 😁

  • @jorgecid5016
    @jorgecid5016 4 года назад

    Greetings, one really GOOD tutorial i gotta say, but i have one question if you dont mind... is there a particular reason why when i load the same url with the new parameters it wont grab the css file? shows up all the information but without visuals. and when i used the normal paremeters the css do loads up.

  • @the-pratik
    @the-pratik 3 года назад +1

    Hello sir, I used your method but when I change old url to new css and js isn't applied. Can you tell how to fix it?

  • @nebojsa1961
    @nebojsa1961 4 года назад

    Hi Daniel, this part is clear, but what if I send a variable via web form in the input tag and wanna to appear in the "clean" url? For example, I have input tag with name=town and value=zagreb and wanna url to be */town/zagreb ?

  • @iggyzane
    @iggyzane 5 лет назад +1

    Thanks so much for this. How do you remove 'index.html' from the landing page? I have the htaccess working for my links.

    • @iggyzane
      @iggyzane 5 лет назад +2

      This ended up working for me: RewriteRule ^index\.html$ / [R=301,L]

  • @szymonbartanowicz8539
    @szymonbartanowicz8539 6 лет назад +1

    Hey! Mmtuts, can You make a video how to use it on your project from episode 57 (a search field). I'm convinced it's more practical example :), btw, thanks for Your videos

  • @remyreijven
    @remyreijven 6 лет назад

    Great tutorial!

  • @ratnakarn6391
    @ratnakarn6391 4 года назад

    Hi... could you tell me the rewrite rule for hiding post names in address bar so that users though they copy and paste url in addressbar does't work.

  • @Tikayy
    @Tikayy 4 года назад +1

    For css and js to work, add the following to :
    Change the url to your site's homepage.
    I currently get homepage url through
    function home_url() {
    return ''.$_SERVER['SERVER_NAME'].'/';
    }
    Hasn't given an issue in multiple domains.

  • @nijandhanjaganathan5281
    @nijandhanjaganathan5281 4 года назад

    Thank you

  • @skitzskr
    @skitzskr 4 года назад +1

    Thanks man, but I ran into a problem: now when I enter my site it won’t load the css. The default url looks like this view.php?site=index and the new one view/index. I did everything like in the video, do you maybe know how to fix this problem? 😁

  • @JamoFPS
    @JamoFPS 6 лет назад

    @mmtuts how would you make it so on your website people would create information and they could hit a button to post it. How would you make it so you can search for the information. For example you search the persons name and find the information for what they posted.
    All on the same site

  • @joachimvoigt2199
    @joachimvoigt2199 2 года назад

    good lesson! But relative links (file paths) are not working any more from a redirected page. Is that the way it should be?

    • @joelnjoroge7202
      @joelnjoroge7202 11 месяцев назад

      include this in your head tag to solve the issue

    • @joachimvoigt2199
      @joachimvoigt2199 11 месяцев назад

      @@joelnjoroge7202 thx, I didn't know base href, using this is probably best practice. Since I have a php environment I have managed so far by writing the base path into a variable which does the job too. 👍

    • @joelnjoroge7202
      @joelnjoroge7202 11 месяцев назад

      Welcome

  • @davidsteve1041
    @davidsteve1041 5 лет назад

    Question: what if I wanted to get rid of /article/ portion? In other words, I want mutts.net/4/Daniel. What would the htaccess file look like then?

  • @softwareengineer484
    @softwareengineer484 4 года назад

    great tutorial but my css does not show with parameters in the url!!! dont why wondring if you could help. Thanks

  • @professor_baltazar
    @professor_baltazar 4 года назад

    Should we really write those sentences for each page? Is there any way to make it recognize the page name automatically?

  • @Ginfio
    @Ginfio 3 года назад +1

    Can you help me?
    What if I have a folder name in the same directory as a file name which has the same name as the folder:
    - index.html
    - xyz (folder)
    vb.html
    abc.html
    - xyz.html

  • @leluonghue
    @leluonghue 2 года назад +1

    Hi Daniel, thank you for the tutorial. I did as your, everything is ok, but images. All images is added "article/" before image, and make it could not be showed. for example : files/picture.jpg become article/files/picture.jpg
    Could you give any solution for that issues?
    Thank you.
    Hue Le

    • @moxopixel
      @moxopixel 2 года назад

      Did you find a solution for this? I'm having the same problem with my images url.

  • @rheannalamph3220
    @rheannalamph3220 6 лет назад

    Is there a way to account for not always having both variables passed? (But still wanting both variables to be ABLE to be passed) Such as article/10 ?? But also to allow article/10/HelloWorld

  • @mrniamster
    @mrniamster 5 лет назад

    Php God 💛

  • @prakashjangir412
    @prakashjangir412 5 лет назад

    Sir, Can you please make a video on search a given string inside all tables of my current selected database. And after finding the result show inside a page like a search engine

  • @drakogemini5257
    @drakogemini5257 5 лет назад

    Thanks :D

  • @anvarzaripboyev5730
    @anvarzaripboyev5730 3 года назад

    If it is an NGINX server that is not an Apache server, which file will replace .htaccess.

  • @john8998
    @john8998 6 лет назад

    18:22 but how do i supposed to know what parameters the user will send in the URL ?!

    • @Dani_Krossing
      @Dani_Krossing  6 лет назад

      Hi :) You are not supposed to know what data the user sends... But perhaps you mean the names we use for the data in the URL? Such as the "id" and "name" which I used in this episode. These are all decided by you (the developer), the user doesn't get to decide that.

    • @john8998
      @john8998 6 лет назад

      OK Dani, it was just my own misunderstanding as to the nature of this file.

  • @ohenry4834
    @ohenry4834 5 лет назад

    Thanks

  • @djadronxofficial
    @djadronxofficial 2 года назад

    Great tutorial but i do have one problem the css breaks

  • @mianaliasjad
    @mianaliasjad 6 лет назад

    Hi
    I have a question.
    I have a page called Peoduct.php
    so when user click on one product i open
    ProductDetails.php file with some parameters like id and name of that product.
    But i don't want to show [ProductDetails.php?id=10%name=hello] to user instead i want to show NameOfProduct.php just that name of product is just name that was clicked by user. don't want to show static name like ProductDetails with passed parameters.
    Can you tell me how i can do this?
    Thanks

  • @mominadil2279
    @mominadil2279 2 года назад

    Hello sir, I have a custom-made PHP website with its database pointing to a demo URL. Is there a way to change the URL? It is fully PHP based, with many plugins for queries and other calculations. The website is working on my other domain and I just need to change the domain name and hosting server. Any help would be hugely appreciated.

  • @beratbikiri
    @beratbikiri 5 лет назад

    Will this actually effect search engines such as Google to index webpages?

  • @moxopixel
    @moxopixel 2 года назад

    Undefined array key "post_url" in article.php on line 5 when accessing the rewritten url

    • @moxopixel
      @moxopixel 2 года назад

      Options -MultiViews solved it...

  • @devgyani4455
    @devgyani4455 4 года назад

    This method doesn't work if there are js and CSS files included in the PHP page. Any help with that?

  • @shanuks6943
    @shanuks6943 4 года назад

    image cs and js error? any solution for that? evyrthing else working fine with db fetch.. but image css errors

  • @kaiqin5224
    @kaiqin5224 6 лет назад

    I want to upload my own website with a backend database, but am having trouble finding ways to do so. I have been looking into azure but all the videos I've seen use Azure Clear DB which is not currently availiable. Anyone have any suggestions?

  • @matttepp3038
    @matttepp3038 6 лет назад +3

    I experimented a bit...
    *# SIMPLE PAGE REWRITE*
    *RewriteCond %{REQUEST_FILENAME} !-d*
    *RewriteCond %{REQUEST_FILENAME}\.php -f*
    *RewriteRule ^(.*) $1.php [NC,L]*
    If you paste this into your *.htaccess* file, you can have clean URLs for pages that don't require any GET parameters, it basically only cuts out the .php part of the URL

    • @Dani_Krossing
      @Dani_Krossing  6 лет назад

      Hehe exactly :) your code looks identical to my HTML lesson on this, so I can vouch that your code is working ;)

    • @matttepp3038
      @matttepp3038 6 лет назад

      Oh I haven't seen that video yet, I usually just watch your PHP tutorials, but thanks for vouching. :D

  • @philordrubis984
    @philordrubis984 4 года назад

    Thank you for the tutorial, but my problem is when I post the new link to facebook. and when I click the URL from facebook. it will redirect me to my old URL structure. Hoping you read this

  • @lamaalqasem9069
    @lamaalqasem9069 5 лет назад

    Thank you so much it worked perfect for me but the css styling isn't showing. Does anyone have any idea why?

    • @innplanet
      @innplanet 4 года назад

      I lost my favicon was getting error 404 and it was there. Try to use php code after head section. may this help.

  • @hassankrisht718
    @hassankrisht718 5 лет назад +1

    it is not working with me, is this because I am not online?

  • @yorkshireplumbing
    @yorkshireplumbing 4 года назад

    I get mixed results using this on live and local servers... using local some of the rewrites work and some don't, it's a massive headache.

  • @vitor-peixoto
    @vitor-peixoto 5 лет назад +3

    My stylesheet doesn't work when I do this, does anyone knows why?

    • @HomelessDeamon
      @HomelessDeamon 5 лет назад

      use absolute paths like shown by @Nero90 up in the comments

  • @utube521
    @utube521 4 года назад

    doesn't work for me, as I am trying to place this .htaccess into a subfolder "articles", like in:
    example.com/articles/article.php?=239
    then in the url address:
    example.com/articles/article/239
    but I get error file not found, and I'm not sure what the reason is

  • @dekesmith2589
    @dekesmith2589 4 года назад +2

    Does anyone know how he is using $_GET on the rewritten URL? As soon as I reWrite the URL my $_GET variables become undefined. I've searched the internet for hours and can't figure out how this is working for him.

    • @innplanet
      @innplanet 4 года назад

      Works fine for me. Did you pass any data through them? For undefined variable unless they get some data you can use @ before variable to stop seeing these errors.

    • @layth3355
      @layth3355 4 года назад

      I faced the same problem and after search for hours I could not find a solution

  • @CoolEditz
    @CoolEditz 5 лет назад

    So, how would I go about this when accessing the directory, but not referencing index.php? Example localhost/?page=Main -> localhost/Main

    • @CoolEditz
      @CoolEditz 5 лет назад

      Nevermind, I figured it out.
      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^/*([a-zA-Z]+) index.php?page=$1 [NC,L]

  • @barathdandu7652
    @barathdandu7652 3 года назад

    to anyone who is having a hard time to get this working,
    you need to put the .htaccess file in the appropriate folder to get it to work,
    for example:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^test/([0-9]+)/([0-9a-zA-Z_-]+) test.php?id=$1&name=$2 [NC,L]
    works only in the correct folder which was: /public_html/p/oldtests, htaccess cannot go through sub directories

  • @theekingyodah1431
    @theekingyodah1431 4 года назад

    how can i still redirect to a correct page despite not detecting an \.php extention in php ?

  • @maarten-20
    @maarten-20 3 года назад

    i see you got a .net, but its a local server, so how did you do that?

  • @ebubeix4008
    @ebubeix4008 4 года назад

    Nice. And You resemble Elon Musk

  • @sharmeenshaikh7301
    @sharmeenshaikh7301 5 лет назад

    please can u describe how to send data in url using the same process like ie test.php?id=12 how this can be done plz do reply

    • @balduran
      @balduran 5 лет назад

      You can use your id with $_GET["id"]. And you should check, if it exists with if( isset($_GET["id]) ) { do stuff...}

  • @rodrigofernandes6449
    @rodrigofernandes6449 4 года назад

    Hey, i managed to change the url, but the .css is not loaded

  • @mikev2066
    @mikev2066 5 лет назад

    I have a home.php
    inside this home are 2 links (2 languages) - home.php?lang=ru and home.php?lang=en
    how to make them as domainDOTcom/en/.......??? what is the correct line for rewriteRule?

  • @aleksandarkrasic8324
    @aleksandarkrasic8324 6 лет назад

    I rewrite code same as you did, url is good, but it seems like i have trouble with $_GET paremeter, and on post.php i have an error Undefined index: p_id, when i var dump $_GET parameter, it's empty, any suggestion? :)

    • @dekesmith2589
      @dekesmith2589 4 года назад

      Hi. I know this is an old comment, but did you ever figure this out? I'm having the same issue. Cannot figure out how he is accessing those $_GET variables after the rewrite

    • @aleksandarkrasic8324
      @aleksandarkrasic8324 4 года назад

      @@dekesmith2589 I think the problem was in WAMP server which i used... If you use same one, try switching on XAMP, just like in this tutorial.. In the end, it's important to understand concept.

    • @dekesmith2589
      @dekesmith2589 4 года назад

      @@aleksandarkrasic8324 I was using MAMP but also tried on my live server and still no luck. In the end I abandoned the .htaccess method and instead am using the PHP method to rewrite my URL's and retrieve parameters. Thanks anywway for the advice.

    • @aleksandarkrasic8324
      @aleksandarkrasic8324 4 года назад

      @@dekesmith2589 No problem... As you learn more, you will eventually move on some framework, such as Laravel. There you have everything settled, but it's always good to have solid base!

  • @bk._550
    @bk._550 4 года назад

    its working, but if I didnt include one parameter in the url it will give 404. How to fix that

  • @jyotiranjanpradhan8595
    @jyotiranjanpradhan8595 6 лет назад

    In php only about when i click on anchor url showing about.php?alias=amar any changes here i need this type sir about/amar

    • @innplanet
      @innplanet 4 года назад

      Hey you can use URL like this about I hope this will help.

  • @Kuminlul
    @Kuminlul 6 лет назад

    So i did everything 100% like u i even checked everything but when im clicking on the title link of my content im getting the rewritelink but my website don't have a css design how can i fix this?

    • @Kuminlul
      @Kuminlul 6 лет назад

      nvm fixed that but somehow i get now only mysqli errors like it can't find the variable $id $title even i includes the article.inc.php right!

  • @amitdhar5147
    @amitdhar5147 3 года назад

    Is this code work on localhost?

  • @Kuminlul
    @Kuminlul 6 лет назад

    Can u show us many to many relationship at mysql?

  • @cipriang.4952
    @cipriang.4952 4 года назад

    Hello, can you make this for my site (I pay of course if necessary). I am afraid not to mess all my site :). More detalils after your answer

  • @EyeLookPT
    @EyeLookPT 4 года назад

    Imagine i have
    example.com/edit/profile?id=1 (where edit is a real folder and inside it i have profile.php)
    I want the rule to be
    example.com/edit/profile/1
    Can I do this with pure PHP? I've been trying and didn't manage it to get it working

  • @SIGMA_Afg
    @SIGMA_Afg 4 года назад

    why youtube does have htaccess file ? ':p

  • @romihaidar3639
    @romihaidar3639 3 года назад

    After i tried this, my css & image file won't load, what should i do?

  • @AustinChris_
    @AustinChris_ 2 года назад

    Please I don't know why I'm receiving "Internal Server Error"

  • @mujahidsoomro7827
    @mujahidsoomro7827 4 года назад

    My CSS is not working .htaccess is working perfectly but css not

  • @bumblebee-eg1eq
    @bumblebee-eg1eq 5 месяцев назад

    best

  • @sunsun4961
    @sunsun4961 2 года назад

    🥳 Alternative Solution | .htaccess not working on local:
    The issue I ran into is that everything worked as it is supposed to on the production server, but not locally. If you are using something like VSCode you need the .html file extension within your links in order to move around your site on vscode live server.
    So you end up running into an issue where if you configure your .htaccess file and remove the .html extension from your links (as shown in the video); everything will work fine when deployed to your public site… however locally you won’t be able to move around your site using vscode live server because the links will display as broken.
    A workaround solution I implemented; if you are using a task runner like Gulp or Grunt is to install a plugin such as gulp-replace (which allows you to setup a automation to replace a string) and setup your gulpfile.js to remove the .html extension from all links within the page when the task is ran. This worked like a charm for me; on my local machine the .html extensions are still in the page links, allowing me to view my site normally on vscode live server. But then before deploying to my public site, the .html extensions are found and removed automatically so that .htaccess can run as intended.
    Example:
    const replace = require('gulp-replace');
    // Remove .html extension in all .html files
    gulp.task('rm-html-ext', async function () {
    gulp.src('src/*.html')
    .pipe(replace('.html', ''))
    .pipe(gulp.dest('dist'));
    });
    The code above basically says, when the task is ran 1) search through all html files located inside the site folder, then 2) for any links within the page that contain .html replace it with ‘’ (aka nothing) and then 3) place the modified html file(s) with .html extensions removed into the production folder. 

Special Note: If you already have a “copy-html” task in your gulpfile.js then be sure to place this task after that one…

  • @channeling294
    @channeling294 4 года назад

    may I know your computer specs for web development? I noticed that you have a lot of apps on your taskbar I just wonder, what computer specs I need to have for web development

    • @pavel2058
      @pavel2058 4 года назад

      You only need a computer powerful enough to handle a text editor and browser. As long as it handles that, it can be used just fine for web dev. For example, I'm currently away and using a cheap HP laptop with an i3 7100U, an SSD but no dedicated GPU - it handles my FTP client, many tabs in chrome, Sublime Text, XAMPP and loads of other running apps a lot smoother than I would have expected it to.
      I would say you are fine with any PC that has an Intel i3/5/7 or Ryzen 3/5/7 from the last 5 years AND has an SDD - it helps slower PCs a lot.

  • @MKRayden
    @MKRayden 6 лет назад

    Thanks but not works with photoplog images

  • @motivatedalltime
    @motivatedalltime 4 года назад

    My htacess file doesnt work on my xampp server

  • @johnpaul-qx7zq
    @johnpaul-qx7zq 6 лет назад

    Hello, can you please make a video on API's with php especially token authentication. I want people to be able to use services of my other websites with an account created at accounts.mysite.com. For example you create an account with google at accounts.google.com then you can use the same account on differents sites like gmail, youtube , etc.

  • @vothanachy8825
    @vothanachy8825 2 года назад

    For now : I followed video but Link showed only html, It wasn't styled. Why ?

    • @Dani_Krossing
      @Dani_Krossing  2 года назад

      It’s a PHP course 🙂 HTML and CSS is a skill that should be known by now, so the only important part you should need is the PHP. The CSS is so basic in these PHP videos you should easily be able to create it if you need it, and if not I recommend checking out my HTML & CSS course.

  • @patricia4622
    @patricia4622 5 лет назад

    how can i do this on nginx??

  • @MrJeske999
    @MrJeske999 6 лет назад

    make a video of how to make a search bar in php & mysql

    • @Dani_Krossing
      @Dani_Krossing  6 лет назад

      I already have that tutorial in this playlist :)

    • @MrJeske999
      @MrJeske999 6 лет назад

      Oh nice work! I love your video’s I learn a lot
      Keep on the good work!

  • @IsaacA192
    @IsaacA192 5 лет назад

    Could you please advise why my get variables become undefined when doing this? This is what I have:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^ia/cms/admin/index/([0-9]+) ia/cms/admin/index.php?user=$1 [NC,L,QSA]
    ia/cms/admin/index/1 is what it should be and my get variable is undefined...

    • @dekesmith2589
      @dekesmith2589 4 года назад

      Hi. I know this is an old comment, but did you ever figure this out? I'm having the same issue. Cannot figure out how he is accessing those $_GET variables after the rewrite

    • @IsaacA192
      @IsaacA192 4 года назад

      @@dekesmith2589 Sorry, I didn't. I gave up on bothering. I just let the links be as they are.

    • @dekesmith2589
      @dekesmith2589 4 года назад

      @@IsaacA192 ah ok no worries. Thanks anyway for the reply