简体   繁体   中英

.htaccess RewriteRule won't work!

I'm using php switch[_get] in my menu system to create url.com/?p=page and I'd like that to change into url.com/page.html. But I can't make it work, maybe some of you know the right settings for this.

I'm currently using this as .htaccess:

RewriteEngine On
RewriteBase /
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^start(.*)\.html$ ?p=start$

Thank you!

Update:

I tried with the $1 but still the url is: ?p=start when I want it to be /start.html

Looks like you're missing the $1 in your last rule:

RewriteRule ^start(.*)\.html$ ?p=start$1
                                     ^^^^

EDIT After new information, try:

RewriteCond %{QUERY_STRING} p=([a-z0-9]+) [NC]
RewriteRule . /%1.html [L]

This captures the p= parameter from the querystring and uses it to rewrite to page.html

Try

RewriteRule ^start(.*)\.html$ ?p=start$1 [L]

See the one (1) at the end.

htaccess works the other way around.

It makes things like /start.html proxy to ?p=start however, you still have make the links themselves target /start.html .

So change all the <a href="?p=start"> to <a href="/start.html"> .

you need

RewriteCond %{QUERY_STRING} ^p=(.+)$ [NC]
RewriteRule ^$ /%1.html? [R=301,L]

R=301 is to change the url in the browser, but you still need to update all links on the site:

<a href="?p=start"> to <a href="/start.html">

Edit: Try the updated one (it has a ? after html)

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