My htaccess code removes “index.php” from urls but it’s supposed to strip out “index.php?”
it leaves the ? which produces a 404 error. htaccess coding is way beyond me
here is my code:
RewriteOptions inherit
DirectoryIndex index.php index.html
#############
# Redirects #
#############
# Redirect 301 /alaska-wrangell-skyscraper.html https://www.trekalaska.com/alaska-hiking-backpacking-trips/wrangell-skyscraper-traverse
###########
# Caching #
###########
Header unset Pragma
FileETag None
Header unset ETag
#1 Year
<FilesMatch "\.(jpg|jpeg|png|gif|swf|flv|ico)$">
Header set Cache-Control "max-age=31556926, public"
</FilesMatch>
#1 Month
<FilesMatch "\.(js|css)$">
Header set Cache-Control "max-age=2629743, public"
</FilesMatch>
#1 Week
<FilesMatch "\.(html|htm|txt|php)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
###############
# Compression #
###############
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
AddOutputFilterByType DEFLATE image/svg+xml application/xhtml+xml application/xml
AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-otf
AddOutputFilterByType DEFLATE font/truetype font/opentype
</IfModule>
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
# Enable Compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
</IfModule>
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
# Leverage Browser Caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
<IfModule mod_headers.c>
<filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
Header set Cache-Control "max-age=2678400, public"
</filesmatch>
<filesmatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, private, must-revalidate"
</filesmatch>
<filesmatch "\.(pdf)$">
Header set Cache-Control "max-age=86400, public"
</filesmatch>
<filesmatch "\.(js)$">
Header set Cache-Control "max-age=2678400, private"
</filesmatch>
</IfModule>
# RewriteEngine On
# RewriteCond %{HTTP_HOST} ^trekalaska.com [NC]
# RewriteRule ^(.*)$ https://www.trekalaska.com/$1 [L,R=301]
# Permanent URL redirect - generated by www.rapidtables.com
# Permanent URL redirect - generated by www.rapidtables.com
Redirect 301 /trips/alaska-wrangell-skyscraper.html https://www.trekalaska.com/alaska-hiking-backpacking-trips/wrangell-skyscraper-traverse
Redirect 301 /alaska-hiking-backpacking-trips/seven-pass-route-iceberg-lake-to-bremner https://www.trekalaska.com/alaska-hiking-backpacking-trips/seven-pass-route-iceberg-to-bremner
Redirect 301 /index.php?/trips/alaska-wrangell-skyscraper.html https://www.trekalaska.com/alaska-hiking-backpacking-trips/wrangell-skyscraper-traverse
Redirect 301 /alaskas-wrangell-st.-elias-national-park/kennicott-alaska https://www.trekalaska.com/wrangell-st-elias-national-park/kennicott-alaska
Redirect 301 /index.html https://www.trekalaska.com
# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php80” package as the default “PHP” programming language.
<IfModule mime_module>
AddHandler application/x-httpd-ea-php80___lsphp .php .php8 .phtml
</IfModule>
RewriteCond %{HTTP_HOST} ^.*$
RewriteRule ^alaska\-hiking\-backpacking\-trips\/seven\-pass\-route\-iceberg\-lake\-to\-bremner$ "https\:\/\/www\.trekalaska\.com\/alaska\-hiking\-backpacking\-trips\/seven\-pass\-route\-iceberg\-to\-bremner" [R=301,L]
Do you have force url query strings
turned on?
Docs: https://docs.expressionengine.com/latest/general/url-structure.html#query-strings
If so, I recommend turning it off.
Hello @ uno online To modify the code to strip out “index.php?” and keep the query string, you can make the following changes:
apache <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /
# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php\? [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule ^index\.php$ / [R=301,NE,L]
# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
With these changes, the htaccess code will redirect URLs with “index.php?” to the root URL without the query string. Please note that modifying htaccess files can be complex, and it’s recommended to have a backup and test thoroughly after making any changes.
Packet Tide owns and develops ExpressionEngine. © Packet Tide, All Rights Reserved.