RewriteBase not being applied - apache

I can't seem to get my .htaccess to work, I'm trying to rewrite all urls that aren't real files or folders to my index.php. The directory I'm in is /cms the rewrite only seems to work when I use this .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /cms/index.php [L]
</IfModule>
When I try and use the RewriteBase /cms/ and change the last line to . /index.php [L] like it's meant to be, the rewrite doesn't rewrite to localhost/cms/index.php and instead it gets rewritten to localhost/index.php

Try using this version:
RewriteEngine On
RewriteBase /cms/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Note that I'm using index.php instead of /index.php with RewriteBase to make sure relative URI is loaded.

Related

htaccess rewrite URL to subdirectory php

I would like to rewrite all URLs, which starts with a /lp/ to a php file in a subdirectory.
This is my current htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^$ /lp/ [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
This is the behaviour I wish to realize:
example .org/lp/ => example.org/lp/ (because index.php is there)
example .org/lp/test => example.org/lp/index.php?p=test
example .org/lp/foo => example.org/lp/index.php?p=foo
I've tried this rule and many others, but it doesn't work:
RewriteRule ^/lp/([^/\.]+)/?$ /lp/index.php?p=$1 [L]
Maybe someone has an idea what I'm doing wrong?

htaccess error leading to loop

I am trying to force SSL on HTACCESS file and all my efforts result in a loop on index.php.
This is my htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
My site works fine with this but no SSL.
I tried the following:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ https://www.fakedomainlollol.com/$1 [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
The updated rewrite rule sends the site in a loop.
What is the error? What am I doing wrong here?

.htaccess Rewrite sub directory

I am trying to change my .htaccess so that when i go to http://example.com/foo it re-rewrites it to my_folder, currently if i go to http://example.com/ it re-writes to my_folder.
i have tried adding RewriteCond %{REQUEST_URI} /foo$ and RewriteCond %{REQUEST_FILENAME} /foo to the condition list but i cant seem to get it to work.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_folder/$1 [L]
</IfModule>
Try adding this rule:
RewriteRule ^/?foo/(.*)$ /my_folder/$1 [L]

mod_rewrite check public folder before passing to php

What I am trying to achieve (with mod_rewrite) is on request check if a file/directory exists in the public folder, if it does, serve it, if not, route the request to the index.php file. Also if no extension provided in the URL then default to .html.
Below is my folder structure:
/.htaccess
/index.php
/public
/test.html
/test.xml
/a_folder
/index.html
/test.html
So for example here are a few requests and responses:
example.com/test.xml >>> /public/test.xml
example.com/a_folder/ >>> /public/a_folder/index.html
example.com/a_folder/test >>> /public/a_folder/test.html
example.com/not_in_public >>> /index.php
Any pointers on this would be amazing, thanks in advance.
Something like this: (Heavily cribbed from my WordPress .htaccess file)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)^(\.\w+) $1.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
The $1.html line is off the top of my head and may need some tweaking. Note that this is a dumb check that the requested URL ends in a dot followed by one or more word characters.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(|index\.php)$ - [L]
RewriteRule ^public/(.*)$ - [L]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [R]
</IfModule>
This should do the trick.
Basically, if it's / or /index.php it won't do anything, if it's /public/whateveryouwant it won't do anything, if it's anything else it will rewrite to /public/whateveryouwant and check if it's either a file or a directory. If it's not it will redirect to index.php.
Thanks to #jxpx777 and #N1xx1 after a bit of juggling made it work.
Options -Indexes
RewriteEngine On
RewriteBase /
RewriteRule ^public/(.*)$ - [L]
# Check public cache
RewriteRule ^(.*)$ public/$1
RewriteRule (.*)/$ $1/index
# Add .html if not extension provided
RewriteCond %{REQUEST_URI} !\..*$
RewriteRule ^(.*)$ $1.html
# Push through stack in not in cache
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

wordpress: mod_rewrite first "folder" name as a get parameter

I set the wordpress permalink-structure to just use the articlename and got a .htaccess that looks like this
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
works fine.
but I want to distinguish between different locations (i.e. berlin, hamburg or muenchen) in my various template files. so I thought I'd add the location to the URL like this:
http://myurl.com/berlin/articlename
and now I need to rewrite this to
http://myurl.com/articlename?location=berlin
but
http://myurl.com/articlename
or
http://myurl.com/category/articlename
should still work. just look for predefined locations (berlin|hamburg|muenchen).
how do I need to adjust the RewriteRule above to accomplish this?
So basically if what you're asking for is that http://myurl.com/(word1)/(word2)/ (i.e. only matches exactly two words, no less no more) gets internally rewritten on the server side to http://myurl.com/(word2)?location=(word1) then here it is:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule /([^/]+)/([^/]+)/$ /$2?location=$1 [QSA,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
i fixed this with the following additions to the .htaccess file:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !location
RewriteRule ^(muenchen|berlin)/$ /index.php?location=$1 [NC,QSA,P]
RewriteCond %{QUERY_STRING} !location
RewriteRule ^(muenchen|berlin)/(.*)$ /$2?location=$1 [NC,QSA,P]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>