Simulate mod_rewrite using JS/JQUERY/PHP - javascript

This is my .htaccess, which am I using to rewrite my URLs:
RewriteEngine on
RewriteRule ^$ /home [L,R=301]
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]
RewriteRule ^([a-z0-9-]+)/?$ /index.php?cat=$1 [L,NC,QSA]
RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)/?$ /index.php?cat=$1&product=$2 [L,NC,QSA]
Is it possible to rewrite links like that in JS/JQUERY/PHP? (or, for example, call mod_rewrite externally)

Related

URL Rewriting: Show all files of certain directories at root of site

So I've got the following code which shows all the files of /guides at the root of my site. I would however also like to show all of the files of /news at the root of my site but I can't figure out how I could do both of these at the same time.
Like this:
example.com/guides/google --> example.com/google
example.com/news/youtube --> example.com/youtube
Simply duplicating the rewrite rule and changing it to /news throws a 403 and seems to mess everything up. Here's my current code:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /guides/$1 [L]
Thank you and sorry for the novice question!
You can use:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/guides/$1 -f
RewriteRule ^(.*)/?$ /guides/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/news/$1 -f
RewriteRule ^(.*)/?$ /news/$1 [L]

CSS and JS get lost when I edit htaccess

I have this wird behaviour on my htaccess:
All the "front" links are working fine, but on the editar_post and editar_usuario, the ones that include the GET parameters, I lose all the CSS and JS files:
RewriteEngine On
###### Admin #####
# Posts
RewriteRule ^listar_posts/?$ listar_posts.php [NC]
RewriteRule ^editar_post/?$ editar_post.php [NC]
RewriteRule ^editar_post/([0-9]+)/?$ editar_post.php?post_id=$1 [NC]
RewriteRule ^nuevoPost/?$ nuevoPost.php [NC]
# Usuarios
RewriteRule ^listar_usuarios/?$ listar_usuarios.php [NC]
RewriteRule ^nuevo_usuario/?$ nuevo_usuario.php [NC]
RewriteRule ^editar_usuario/([0-9]+)/?$ editar_usuario.php?id_usuario=$1 [NC]
RewriteRule ^editar_usuario/?$ editar_usuario.php [NC]
# Login
RewriteRule ^login/?$ login.php [NC]
#Front
RewriteRule ^front/?$ front/index.php [NC]
RewriteRule ^front/([0-9]+)/?$ front/post.php?post_id=$1 [NC]
RewriteRule ^front/tecnologia?$ front/search.php?seccion=Tecnologia [NC]
RewriteRule ^front/marketing?$ front/search.php?seccion=Marketing [NC]
RewriteRule ^front/emprende?$ front/search.php?seccion=Emprende [NC]
RewriteRule ^front/tips?$ front/search.php?seccion=Tips [NC]
Can you please help me?
(also if I put the CSS and JS on absolute paths I lose everything no mather what)
htaccess is working but base href add meta
<head>
<base href="http://www.domain.com/" />
</head>

Cant visit links without adding a question mark to the URL

Every time when I click on an URL I get a 404. That's because the page can't be found. But when I add a question mark right after the .domain the page is found. This was not the problem when I had the website hosted in a subdomain folder. A question mark is required to visit a page and I don't want to have the question mark.
Please see the url: http://www.ankehesselmann.nl/
I'm using StaceyApp
This is my .htaccess
RewriteEngine on
# Some hosts require a rewritebase rule, if so, uncomment the RewriteBase line below. If you are running from a subdirectory, your rewritebase should match the name of the path to where stacey is stored.
ie. if in a folder named 'stacey', RewriteBase /stacey
RewriteBase /stacey
ErrorDocument 404 /404.html
# Rewrite any calls to *.html, *.json, *.xml, *.atom, *.rss, *.rdf or *.txt if a folder matching * exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !public/
RewriteCond %{DOCUMENT_ROOT}/public/$1.$2 !-f
RewriteRule (.+)\.(html|json|xml|atom|rss|rdf|txt)$ $1/ [L]
#Add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.)
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ([^/]+)$ $1/ [L]
# Rewrite any calls to /* or /app to the index.php file
RewriteCond %{REQUEST_URI} /app/$
RewriteRule ^app/ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ index.php?$1 [L]
# Rewrite any file calls to the public directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !public/
RewriteRule ^(.+)$ public/$1 [L]
I'm guessing the RewriteBase is set to the wrong folder in your .htaccess
Though I cannot explain why it works with the question mark as you said, I would try setting the RewriteBase correctly.
You have to put the sub-folder (path from domain name until your index-file) if you have any. E.g.:
Website located at: example.com/folder1/sub/
RewriteBase /folder1/sub/
If your website doesn't have a sub-folder:
RewriteBase /
You may try removing the line if you haven't got a sub-folder, but it should not make any problems if set to / (slash).

Revoke access to certain pages using 404

Hi I have certain urls which i dont want to access by users but unfortunately can't remove them as they are part of my url. For example i have url like this:
example.com/places (want to revoke access to this page)
example.com/places/in/jaipur/ (location is selected)
example.com/places/restaurants/(want to revoke access to this page)
example.com/places/in/jaipur/restaurants/ (location is selected)
In general I want them to 404 if no location is selected.
Just updated the code in htacess but still urls are accessible:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{THE_REQUEST} \s/+places(/restaurants/)?[?\s] [NC]
RewriteRule ^ - [L,R=404]
</IfModule>
# END WordPress
In your .htaccess file you can do the following:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/places/ [OR]
RewriteCond %{REQUEST_URI} ^/places/restaurants/
RewriteRule ^(.*)$ - [R=404,L]
You can use this rule in your DOCUMENT_ROOT/.htaccess file:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+places(/restaurants/)?[?\s] [NC]
RewriteRule ^ - [L,R=404]

ModRewrite breaking styles and javascript

I'm very unfamiliar with htaccess, so I have no clue how to tackle this weird issue.
I have a domain connected to a different server by setting the nameservers. Then I use htaccess and ModRewrite to link paths to subfolders on my server, using an existing script like this:
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/t/domainfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /t/domainfolder/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteRule ^(/)?$ t/domainfolder/index.php [L]
This works perfectly, but I'd also like (dynamic) non-existing directories to work, like domain.com/user/username. I figured I could do that by adding the following line:
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/t/domainfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/(.*)$ /t/domainfolder/app/index.php?user=$1 [L]
RewriteRule ^(.*)$ /t/domainfolder/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteRule ^(/)?$ t/domainfolder/index.php [L]
This does work, but all styles break and only plain HTML is visible. The console outputs the following error:
SyntaxError: Unexpected token '<'
The error points to the < of the doctype on the top of the page, so it looks like it is incorrectly parsing the HTML or something. Any help would be greatly appreciated!
EDIT
my non-working addition seems to break my other domains pointing to this server as well
It seemed you break the RewriteCond and RewriteRule pair, add all these lines:
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/t/domainfolder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/(.*)$ /t/domainfolder/app/index.php?user=$1 [L]

Categories