Solved

.htaccess rewrite query

Posted on 2007-11-24
12
850 Views
Last Modified: 2010-04-21
I currently use the following as standard on all the sites I develop:

# Replace mydomain/index.php with /
RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC]
RewriteRule . / [R=301,L]

# Force Trailing Slash For Folders
RewriteCond %{REQUEST_URI} ^/[^.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

# Remove all instances of index.php leaving just the preceding /
# RewriteRule (.*)index\.php(.*) $1$2 [R,L]

The problem is the last one not only replaces index.php with a / it also replaces stimgs such as index.php?pageId=25

How can I get index.php replaced with a / only if there is not a string after it?

Hope this makes sense.

Thanks,

Luv2.
0
Comment
Question by:Luv2Muff
  • 7
  • 5
12 Comments
 
LVL 43

Expert Comment

by:ravenpl
ID: 20343777
#only if query string is empty
RewriteCond ${QUERY_STRING} ^$
RewriteRule (.*)index\.php$ $1 [R,L]
0
 

Author Comment

by:Luv2Muff
ID: 20343939
Glad to see you are on the case revenpl.

I have tried this as you suggested, but for example:

http://www.doublespark.co.uk/website-design/index.php

does not get re-written as :

http://www.doublespark.co.uk/website-design/

Can you have another look?

Thanks,

Luv2.
0
 
LVL 43

Expert Comment

by:ravenpl
ID: 20344072
And where it's redirected? To http://www.doublespark.co.uk/ ? If so, then the first rule fired first
RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC] # match for website-design/index.php
RewriteRule . / [R=301,L]

IMHO since the last one is about to remove any trailing index.php, You should disable the first rule.
0
 

Author Comment

by:Luv2Muff
ID: 20344109
Sorry ravenpl, I think I am not being clear and that I am confusing you.

What I want is any url that ends with /index.php being we-witten just leaving the /

So that

http://www.doublespark.co.uk/website-design/index.php

would become:

http://www.doublespark.co.uk/website-design/

and

http://www.doublespark.co.uk/index.php

would become:

http://www.doublespark.co.uk/

But

http://www.doublespark.co.uk//index.php?1234

would be not be re-written

Sorry for not explaining myself very well in the first place.
0
 

Author Comment

by:Luv2Muff
ID: 20344113
I guess this explains what I need but in one line:

#Remove all instances of index.php leaving just the preceding / but only if query string is empty
0
 
LVL 43

Expert Comment

by:ravenpl
ID: 20345072
OK, I would go this way, I don't know why You have the first rule using THE_REQUEST

# Force Trailing Slash For Folders access
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} ![^/]$
RewriteRule (.*) $1/ [R,L]
#bit isn't it better to load mod_dir? http://httpd.apache.org/docs/2.0/mod/mod_dir.html#directoryslash

#remove index.php if no query string after that
RewriteCond ${QUERY_STRING} ^$
RewriteRule (.*)index\.php$ $1 [R,L]
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 

Author Comment

by:Luv2Muff
ID: 20345206
Thanks for trying, but index.php is never removed
0
 
LVL 43

Accepted Solution

by:
ravenpl earned 500 total points
ID: 20346630
The above second rule have obvious bug
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*)index\.php$ $1 [R=301,L]

and it should work - hence does not for me, I wonder why?
0
 

Author Comment

by:Luv2Muff
ID: 20346668
Perfect - many thanks!!
0
 

Author Closing Comment

by:Luv2Muff
ID: 31410766
Perfect!!
0
 
LVL 43

Expert Comment

by:ravenpl
ID: 20346689
I still wonder why it will not work for me - I was debugging it for hour!
But glad it works for You.
0
 

Author Comment

by:Luv2Muff
ID: 20346840
I do appreciate the time you put in to this, I have been wanting that bit of code for a long time.

Thanks again,

Luv2.
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Suggested Solutions

As Wikipedia explains 'robots.txt' as -- the robot exclusion standard, also known as the Robots Exclusion Protocol or robots.txt protocol, is a convention to prevent cooperating web spiders and other web robots from accessing all or part of a websit…
If your site has a few sections that need to be secure when data is transmitted between the server and local computer, such as a /order/ section for ordering or /customer/ which contains customer data, etc it would of course be recommended to secure…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now