.htacces how to write htacces rewrite rule for seo friendly url - url

I'm just new to .htacces
I want:
example.com/page.php?page=how-to-learn
changed to:
example.com/how-to-learn
I google'd some and tried but no change url.

That's not how .htaccess work : it won't change your links to display the corrected version, but it looks for a match in the expressions you'll write into it to rewrite the correct parameters.
For example, in your code, your .htaccess sould look something like this :
RewriteEngine On
RewriteRule ^([a-z-]+)$ page.php?page=$1 [QSA,L]
If you write example.com/how-to-learn in your browser, you'll be able to see the content of example.com/page.php?page=how-to-learn.
I advise you to be VERY careful though : as the expression is VERY permissive, you'll have to check in the page.php file that the file if legitimately allowed to be loaded.

Related

how to create syntax for url rewriting

i have got this url like below :
http://www.mylink.com/property?id=34455
whats the rule to rewrite it to be in the following form without breaking
the css or anything. I see it done on multiple websites
http://www.mylink.com/property/3455
i already tried
RewriteRule ^property/?$ property.php [NC,L]
If the URL to be rewrited to http://www.mylink.com/property/3455 is http://www.mylink.com/property.php?id=34455 (notice the ".php" after property), the rule could be this one:
RewriteRule ^property/([0-9]+)$ property.php?id=$1
You can test your rules here http://martinmelin.se/rewrite-rule-tester/

hide url directory

I have a website:
www.mydomain.com/subfolder/subfolder/index.php
How could always hide the directory names from the url. I mean always hide the 2 subfolders' names from the url as the page changes.
Example:
These urls:
www.mydomain.com/subfolder/subfolder/index.php
www.mydomain.com/subfolder/subfolder/about.php
www.mydomain.com/subfolder/subfolder/contact.php
...
Becomes:
www.mydomain.com/index
www.mydomain.com/about
www.mydomain.com/contact
...
I want to use the last mentioned urls for requesting these pages, too, without typing a horrible long url.
you can find some good hints when you will look for mod_rewrite or mod rewrite in htaccess.
If you have access to the Rewrite engine, you can use a simple rewriting pattern similar to this:
RewriteRule ^/(.*)$ /subfolder/subfolder/$1.php

.htaccess php progress

Thanks to the people that've helped me so far with this, I'm ready for the last step, I think.
I've got my URLs looking like this.
/brochure.php?cat_path=35&name=concrete-intermediate-posts
This is great and finally I just need to know how to turn that URL into this desired URL:
/brochure/35/concrete-intermediate-posts
Just like the Stack Overflow format.
Could anyone help me with the correct .htaccess rule?
Also, if I have other get variables in other sections, will this re-write harm them? (they use different variable names)
Thanks
With mod_rewrite you will rather do the opposite: rewrite a URL path like /brochure/35/concrete-intermediate-posts internally to /brochure.php?cat_path=35&name=concrete-intermediate-posts:
RewriteRule ^([^/]+)/(\d+)/([^/]+)$ $1.php?cat_path=$2&name=$3 [L,QSA]
The other side, using a URL path like /brochure/35/concrete-intermediate-posts instead of /brochure.php?cat_path=35&name=concrete-intermediate-posts in the HTML documents, would be done with PHP.
I Hope you mean something like this:
RewriteEngine On
RewriteBase /
RewriteRule ^brochure/([0-9]+)/([-a-zA-Z0-9]+)$ /brochure.php?cat_path=$1&name=$2 [L]

cloacking url via .htaccess

so i read stuff about how apache's mod_rewrite does the trick but it seems to be too vague for beginners like me.
lets say i wanted to mask site.com/userpage.php into site.com/ or site.com/userpage
or even removing the get requests..
from site.com/userpage.php?query=yes into site.com/userpage.php or site.com/userpage
how can i do that by using htaccess or even other methods?
thanks guys
First, remember to put this line in your .htaccess before any rewrites:
RewriteEngine on
If you want site.com/something to display site.com/something.php if it exists without changing the URL, do this:
RewriteCond %{REQUEST_URI}.php -f
RewriteRule .* %{REQUEST_URI}.php
That will display a [file you requested].php if it exists while still showing the same URL you entered. If the php file doesn't exist, it will still give you a 404 as it should. (That's what the -f is for.)
There is no way to hide the GET requests completely. You can get rid of the GET requests, but then they won't be available to your script either and there's no point. You can, however, make it look nicer. For example, if you want site.com/userpage/item/30 to display the content of site.com/userpage.php?item=30, you can do something like this:
RewriteRule ^/userpage/item/(.*)$ userpage.php?item=$1
You could also make it work with any GET value with a rule like this:
RewriteRule ^/userpage/(.*)/(.*)$ userpage.php?$1=$2
With that in effect, you could access site.com/userpage.php?query=yes with site.com/userpage/query/yes instead. That's pretty much the best you can do; GET values have to come from the URL somehow, so if you want your inputs completely hidden you'll have to use POST instead.
If you don't want to append the GET requests, why not use POST?
Also, you can use MultiViews to allow /userpage.php to be accessed as /userpage.
Options Indexes FollowSymLinks Includes MultiViews
The way MultiViews works it will check for a directory named userpage, and if it finds none, then it will go to the file, just a heads up in case you had a directory named userpage as well.

Mod_rewrite - how to 301 redirect an old URL to a new one

I need to grab some of my website's old URLs and do a 301 redirect to the new ones, since they are already indexed and we don't want to loose relevance after the change. The old URL is in fact very ugly and for some reason everything I try to do to rewrite it does not work. Here it is:
http://www.mywebsite.com/ExibeCurso.asp?Comando=TreinamentoGeral&codCurso=136&Titulo=Como%20Estruturar%20um%20Sistema%20Gerencial%20de%20Controles%20Organizacionais,13
Basically, I need to translate it into something like:
http://www.mywebsite.com/curso/136
From the old URL I need to check if the user typed "ExibeCurso.asp"; then I know I must send him here: /curso. I must also grab the integer that was in the querystring parameter "codCurso" (136). What is the regular expression I must use for this. I am using ISAPI_Rewrite 3, which basically implements htaccess on IIS, so there should be no difference in terms of syntax. Thanks.
Try this rule:
RewriteCond %{QUERY_STRING} ^([^&]*&)*codCurso=([0-9]+)(&.*)?$
RewriteRule ^/ExibeCurso\.asp$ /curso/%2? [L,R=301]
But I’m not sure whether ISAPI Rewrite requires the pattern to begin with a slash.
Off the top of my head, something like this should work:
RewriteRule ^ExibeCurso.asp(.*)$ http://www.mywebsite.com/curso/$1 [L,R=301]
That would at least send the traffic to /curso/ with all parameters attached. Maybe it's best to process it from there.

Resources