nagaraj
nagaraj

Reputation: 9

htaccess for rewrite URL is not working for my website

I have dynamic URL website (irasol.com) while i navigate to menu the url shows like

http://irasol.com/index.php?id=1

I want url like this

domainname/home
domainname/aboutus
domainname/contactus
domainname/apply

home, aboutus, contactus, apply are menu name it is already in database.

my htaccess file is

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^([^/]*)\.php$ /index.php?id=$1 [L]

Upvotes: 1

Views: 75

Answers (2)

zx81
zx81

Reputation: 41838

Use this instead:

Options -Multiviews
RewriteEngine on

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?id=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)/?$ index.php?id=$1 [B,L]

Explanation

  • The first three conditions make sure that domainname/aboutus is not a real file, so that we don't rewrite files that already exist.
  • Options -Multiviews removes a number of potential problems

Upvotes: 2

aowie1
aowie1

Reputation: 846

In your current code, get rid of the .php in your pattern:

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

You are not matching .php extensions in the request. You are only routing matches to a query string on a real .php extension

As for a better solution:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?id=$1 [L]

Upvotes: 0

Related Questions