Take the 2-minute tour ×
Webmasters Stack Exchange is a question and answer site for pro webmasters. It's 100% free, no registration required.

I'm working on a project right now and I'm trying to make the links pretty.

We have urls like this: http://subdomain.domain.com/DynamicCountry/DynamicName/file.php

What I'm trying to do is set the RewriteBase to /DynamicCountry/DynamicName. Is this possible using Mod_Rewrite's variables?

share|improve this question
3  
RewriteBase is a directive that affects all relative path substitutions in the RewriteRule directive. To be honest I don't think this is really what you need. What exactly are you trying to achieve? I assume the "ugly" (real) URL is the one you have given (and which you would need to internally rewrite to)? And what does the "pretty" URL look like? The same but minus the file.php?? –  w3d Jan 29 at 23:16

1 Answer 1

up vote 1 down vote accepted

Provided you are happy with pretty URL's that do not end in / but have no file extensions shown such as .php, for example:
http://subdomain.domain.com/DynamicCountry/DynamicName/file
then you could try this solution.

  • Add these lines of code in your http://subdomain.domain.com/.htaccess file:

RewriteEngine on
RewriteRule ^(lib|theme|uploads|images|ajax) - [L]
RewriteCond $1 !^(index\.php|api|theme|images|robots\.txt|sitemap\.xml)
RewriteRule ^(.*)$ /index.php/$1 [L]

  • And then these in your http://subdomain.domain.com/index.php file (substituting the $sPath variable value with the correct linux path for your hosting environment):

<?php
$sPath='/var/www/subdomain.domain.com/';
$sAlias=isset($_SERVER["REQUEST_URI"])?substr($_SERVER["REQUEST_URI"],1):''; if(strpos($sAlias,'?')>0) $sAlias=substr($sAlias,0,strpos($sAlias,'?')); if(strpos($sAlias,'?')<1) $sAlias='default';
if(!file_exists($sPath.$sAlias.'php')) $sAlias='file-not-found';
require_once($sPath.$sAlias.'php');

  • And then create a pages sub-folder inside the subdomain web root folder, and inside there you could have sub-folders DynamicCountry and DynamicName and then file.php. In this example, the pretty URL:
    http://subdomain.domain.com/DynamicCountry/DynamicName/file
    would show the page:
    /var/www/subdomain.domain.com/pages/DynamicCountry/DynamicName/file.php

  • In the event of an HTTP 404 error, you'll need a file to be present at:
    /var/www/subdomain.domain.com/pages/file-not-found.php
    in order to ensure an infinite loop of File Not Found errors does not occur! For SEO reasons mainly, remember to use PHP code header('HTTP/1.0 404 Not Found'); before any HTML code is output. This helps search engines identify real pages from error pages.

Obviously you can modify this solution to your requirements but hopefully it gives you a good skeleton concept to work from.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.