I have a problem whereby google has indexed some pages with the wrong url.
The url they are indexing is:
http://www.example.com/index.php/section1/section2
I need it to redirect to:
http://www.example.com/section1/section2
.htaccess isn't my forte, so any help would be much appreciated.
Thanks in advance.
php appears in the URL might be because the structure of permalinks is not set properly in WordPress Settings. So to verify if the structure of permalinks is set properly, let's check the permalink tab in WordPress Dashboard.
htaccess file in CodeIgniter. htaccess is the shortened used for Hypertext Access, which is a powerful configuration file that controls the directory “. htaccess”. It is used by Apache based web servers to control various server features.
The original answer is actually correct, but lacks explanation. I would like to add some explanations and modifications.
I suggest reading this short introduction https://httpd.apache.org/docs/2.4/rewrite/intro.html (15mins) and reference these 2 pages while reading.
https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html https://httpd.apache.org/docs/2.4/rewrite/flags.html
This is the basic rule to hide index.php
from the URL. Put this in your root .htaccess
file.
mod_rewrite
must be enabled with PHP and this will work for the PHP version higher than 5.2.6.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) /index.php/$1 [L]
Think %{REQUEST_FILENAME}
as the the path after host.
E.g. https://www.example.com/index.html
, %{REQUEST_FILENAME}
is /index.html
So the last 3 lines means, if it's not a regular file !-f
and not a directory !-d
, then do the RewriteRule
.
As for RewriteRule formats:
So RewriteRule (.*) /index.php/$1 [L]
means, if the 2 RewriteCond
are satisfied, it (.*)
would match everything after the hostname. .
matches any single character , .*
matches any characters and (.*)
makes this a variables can be references with $1
, then replace with /index.php/$1
. The final effect is to add a preceding index.php
to the whole URL path.
E.g. for https://www.example.com/hello
, it would produce, https://www.example.com/index.php/hello
internally.
Another key problem is that this indeed solve the question. Internally, (I guess) it always need https://www.example.com/index.php/hello
, but with rewriting, you could visit the site without index.php
, apache adds that for you internally.
Btw, making an extra .htaccess
file is not very recommended by the Apache doc.
Rewriting is typically configured in the main server configuration setting (outside any
<Directory>
section) or inside<VirtualHost>
containers. This is the easiest way to do rewriting and is recommended
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With