简体   繁体   中英

How can I rewrite query parameters to path parameters in Apache?

I currently have a website that I am trying to optimize in terms of SEO.

I've got the site working with URLs such as:

domain.com/?app=about

In my app, $_GET[app] is set to 'about', as expected.

Now, I want to make it so that a URL like domain.com/about is treated as if it were domain.com/?app=about .

How can I do this in an Apache .htaccess file?

These are known as RewriteRule s, and they are fairly straightforward:

RewriteEngine on
RewriteRule ^about$ /index.php?app=about

Here's the documentation

As far as making it more generic, how about this:

RewriteEngine on
RewriteRule ^([A-Za-z]+)$ /index.php?app=$1

This will make any request to something like /staff or /contact redirect to index.php?app=[staff|contact]

Use this in your .htaccess

RewriteEngine on
RewriteBase /your-site # only if neccessary

RewriteRule ^([^/])$ index.php?app=$1 [R,L]

EDIT

I added the L flag meaning process this as the last rule, and the R flag which by itself does not change the URL .. just rewrites internally. Doing R=301 will forward the browser to the rewritten page, which is useful for debugging.

Creating a general .htaccess getting the path requested can be done with the following line:

RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B]

This will give you the path requested escaped properly so if the requested path is /hello/world you will get hello%2Fworld in the path parameter. Use the PHP function urldecode() to get the original format.

Works only if the url ends with '/'.

NOTE If you have other rewrites in the same file you should place this one last as it will match basically anything.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM