mod_rewrite is not fully working

I have a .htaccess that looks like this

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{QUERY_STRING} ^page=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &page=([^&]+) [NC]
RewriteRule ^index.php$ /%1? [R,NC,L]
</IfModule>

I’ve put this file on two different servers.
on server 1, it works just fine. I mean it redirects /index.php?page=asd to /asd ..
On the second server it does not redirect to /asd.
On the second server, i have this file now,

Read More
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]

The first server was just to test the htaccess file.
The second server is the live one. I’m running wordpress on it and I want the index.php?page=asd links to disappear, to redirect to /asd, but to still map to index.php?page=asd.

How do I do this?

On request, my full htaccess file for the second server

# Attempt to override some php settings, these settings may be helpful on some hosts if your
# default configuration does not meet CMS's minimum requirements, and your host
# has given your account appropriate permissions
php_value upload_max_filesize "10M"
php_value session_save_path "tmp/cache"

#php_flag magic_quotes_gpc Off
#php_flag register_globals Off
#php_flag session.use_trans_sid Off

# (this is important, so uncomment if your host permit)
Options -Indexes
ServerSignature Off

Options +FollowSymLinks

# To prevent E_STRICT problems with PHP 5.3+ you can uncomment the following lines
# Note: These settings should only be enabled for production sites!
#php_flag display_startup_errors 0
#php_flag display_errors 0
#php_flag html_errors 0
#php_value docref_root 0
#php_value docref_ext 0

<IfModule mod_rewrite.c>
RewriteEngine on
#
#Sub-dir e.g: /cmsms
#RewriteBase /

# 301 Redirect all requests that don't contain a dot or trailing slash to
# include a trailing slash
# but ignore POST requests.
#RewriteCond %{REQUEST_URI} !/$
#RewriteCond %{REQUEST_URI} !.
#RewriteCond %{REQUEST_METHOD} !POST$
#RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
#


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]

#RewriteRule ^(.*)$ /$1 [R=301,L]

#RewriteRule ^index.php/(.*)$ /$1 [R,NC,L]

#RewriteCond %{QUERY_STRING} ^page=([^&]+) [NC,OR]
#RewriteCond %{QUERY_STRING} &page=([^&]+) [NC]
#RewriteRule ^index.php$ /%1? [R,NC,L]
</IfModule>

<IfModule mod_rewrite.c>

</IfModule>

<IfModule mod_header.c>
# Disable ETags
Header unset ETag
FileEtag None
</IfModule>

<IfModule mod_deflate.c>
# Compress css, plaintext, xml, gif, and images in transport.
AddOutputFilterByType DEFLATE text/css text/plain text/xml image/gif image/jpeg image/png
</IfModule>

<IfModule mod_expires.c>
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
# Set expires tags on various files... so that the browser wont attempt to reload them.
ExpiresActive On
ExpiresDefault "access plus 1 year"
<IfModule mod_header.c>
  # Setting cache control to public allowes proxy servers to cache the items too.
  Header set Cache-Control "public"
</IfModule>
</FilesMatch>
</IfModule>

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files>

<IfModule mod_headers.c>
# WEEK
<FilesMatch ".(jpg|jpeg|png|gif|swf|woff)$">
    Header set Cache-Control "max-age=604800, public"
</FilesMatch>
</IfModule>

Related posts

1 comment

  1. Change all your rewrite rules block with this code:

    RewriteEngine On
    
    # redirects /index.php?page=asfd to /asdf
    RewriteCond %{THE_REQUEST} /index.php?page=([^s&]+) [NC]
    RewriteRule ^ /%1? [R=302,L,NE]
    
    # redirects /index.php/asfd to /asdf
    RewriteCond %{THE_REQUEST} /index.php/([^?s]+)s [NC]
    RewriteRule ^ /%1 [R=302,L,NE]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ index.php?page=$1 [QSA,L]
    

Comments are closed.