Jump to content

[SOLVED] When path starts with admin go there


jordanwb

Recommended Posts

Currently I have the following .htaccess file:

 

RewriteEngine On

RewriteBase /~jordanwb/jscm

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

RewriteRule ^.*$ index.php

 

Which works, but I want Admin related features to be directed to admin.php, I modified it like so:

 

RewriteEngine On

RewriteBase /~jordanwb/jscm

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

RewriteRule ^admin(.*) admin.php
RewriteRule ^.*$ index.php

 

but I still get sent to index.php but with broken CSS and images. All the links start with /~jordanwb/jscm which is a real path, then a fake path like /pages/hello (/~jordanwb/jscm/pages/hello), for admin it would be similar: /~jordanwb/jscm/admin/pages

Do you mean something like this...

 

RewriteEngine On  
   
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^admin/?(.+) admin.php?page=$1

 

Which will take a URL from the user such as http://www.example.com/admin/manage-users and will send back http://www.example.com/admin.php?page=manage-users. (I believe :))

Let's say I have this url:

 

http://example.com/pages/hello

 

pages/hello gets sent to index.php because it doesn't start with admin

 

http://example.com/admin/pages/hello

 

pages/hello gets sent to admin.php because it starts with admin.

Did you try my code? By the sounds of it you could remove the ?page=$1 and it will do exactly what you want it to, I was simply passing the remainder of the URL as a $_GET variable, you could of course use $_SERVER['REQUESTED_URI'] if you needed to know what page the user requested.

If like this:

 

Options +FollowSymlinks
RewriteEngine On

RewriteBase /~jordanwb/jscm

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

RewriteRule ^admin/?(.+) admin.php [L]
RewriteRule ^.*$ index.php

 

the css still breaks.

The paths to the style sheets are absolute:

 

<link rel="stylesheet" href="/~jordanwb/jscm/themes/WebDevTheme/style.css" type="text/css" media="screen" />

 

Pointing the browser to http://99.224.34.94/~jordanwb/jscm/themes/WebDevTheme/style.css does not give the stylesheet but rather /~jordanwb/jscm/index.php. Commenting out the "RewriteRule ^admin/?(.+) admin.php [L]" line fixes this but does not fix my other problem.

Ahhh, I forgot that RewriteConds only apply to the closest rewrite rule.

 

 

RewriteCond %{SCRIPT_FILENAME} !-d

RewriteCond %{SCRIPT_FILENAME} !-f

 

Rule1

 

RewriteCond %{SCRIPT_FILENAME} !-d

RewriteCond %{SCRIPT_FILENAME} !-f

 

Rule2

 

 

I'm sure there's a way to do it less redundantly, but I don't remember how off the top of my head.

Okay so the css works now, but http://99.224.34.94/~jordanwb/jscm/admin still does not go to /~jordanwb/jscm/admin.php

 

.htaccess

 

Options +FollowSymlinks
RewriteEngine On

RewriteBase /~jordanwb/jscm

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

RewriteRule ^admin/?(.+)$ admin.php [L]

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

RewriteRule ^.*$ index.php

RewriteRule ^admin/?(.+)$ admin.php [L]

 

 

I should've seen that earlier...

 

 

While /? means that the trailing / is optional, .+ means that 1 of any character is required.  (You'll notice that if you go to admin/ it will probably work.)

 

 

Anyway, I would try:

 

RewriteRule ^admin admin.php [L]

 

 

(Unless you want to capture what comes after admin it doesn't matter.)

 

 

If that doesn't suit your needs:

 

 

RewriteRule ^admin/?(.*)$ admin.php [L]

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.