...

View Full Version : Rewrite rule, need some help.



-Karl-
07-09-2010, 04:37 AM
So far I have:

Options +FollowSymLinks
RewriteEngine on
RewriteRule \.(gif|png|jpg|css|js)$|^index\.php$ - [L]
RewriteRule ^quests/(.*)/(.*)$ quests.php?flibble=questview&id=$2&ic=1
RewriteRule ^(.*)$ index.php?page=$1

What I'm trying to do is.

www.mysite.com/quests works fine, the images load and so does the content.

However, if I do something like

www.mysite.com/quests/

it fails to load the images or the content.

I'm also trying to dynamically create a page.

so that www.mysite.com/quests/questname/questid would load the appropriate information. The link currently looks like
quest.php?flibble=questview&id=QUESTID&ic=1 where QUESTID is the number of the quest entry. However, I just can't get my head around it.

This is my function for showing the quest:

function questview($id) {

require_once ('includes/connect.php');//connect to db
include ('includes/steps.php');
/* query for item */
$query = "SELECT * FROM quest WHERE id=$id";
$result = mysql_query ($query);

/* if we get no results back, error out */
$numrtn = mysql_num_rows($result);

if ($numrtn == 0) {
echo "The quest guide requested cannot be found\n";
echo $id;
return;
}
$row = mysql_fetch_assoc($result);
/* easier to read variables and
* striping out tags */
$id = $row['id'];
$name = $row['name'];
$contributors = $row['contributors'];
$guideby = $row['guideby'];
$added = $row['added'];
$location = $row['startinglocation'];
$members = $row['members'];
$description = $row['description'];
$difficulty = $row['difficulty'];
$requirements = $row['requirements'];
$items = $row['items'];
$reward = $row['reward'];
$guide = $row['mainbody'];
$length = $row['length'];
$updated = $row['updated'];
if ($members == "Y") {
$mem = "members only quest</b>, so it can only be done on a <b>members</b> server.";
}else{
$mem = "non-members quest</b>.";
}
if ($updated == 0){
$up = 'No-one has updated this quest guide';
}else{
$date2 = date("l jS F Y @ H:i:s ", $updated);
$up = 'It was last updated on '.$date2;
}
if ($contributors != ""){
$con = 'Thanks also to <b>'.$contributors.'</b> for changes.';
}else{
$con = 'No-one else has contributed to this quest guide.';
}
//$date = date("D M jS, Y g:i a", $added);
$date = date("l jS F Y @ H:i:s ", $added);

echo '
<div id="quest"><table width="100%" border="0">
<tr>
<td>
<h1 align="center">'.$name.'</h1>
';
echo step_js();
echo pick_clue($id);
echo toggle_reward();
echo toggle_clue();
echo '<br>';
echo '
<p class="text1">This quest guide was written by <b>'.$guideby.'</b> for use on Runehints and entered into the database on '.$date.'. '.$up.'. '.$con.' <br /></p>
<p><span class="text1"><br />This quest is <b>'.$mem.'</span></p>
<p>
<span class="qtitle">Description: </span><span class="text1">'.$description.'</span></p>
<p><span class="qtitle">Difficulty Level: </span><span class="text1">'.$difficulty.'</span></p>
<p>
<span class="qtitle">Requirements: </span><span class="text1">'.$requirements.'</span></p>

<p>
<span class="qtitle">Items Needed During Quest: </span><span class="text1">'.$items.'</span></p>
<p>
<span class="qtitle">Starting Location: </span><span class="text1">'.$location.'</span></p>
<p><span class="qtitles">Quest Instructions:</span></p>';
echo list_steps($id, true);
echo '<p>
<div id="rewardwrap" style="display:none;"><span class="qtitle">Reward: </span><span class="text1">'.$reward.'</span></div></p>
&nbsp;</td>
</tr>
</table></div> ';
}

Here's the switch:

switch($_GET['flibble']) {

case 'selectquest':
selectquest();
break;
case 'questview':
questview($_GET['id']);
break;
default:
selectquest();
}

I didn't write the function, so it needs modification to work with the rewrite rule.

Any help is greatly appreciated, if you need more information, please ask.

Regards,
Karl

abduraooft
07-09-2010, 09:09 AM
www.mysite.com/quests works fine, the images load and so does the content.

However, if I do something like

www.mysite.com/quests/

it fails to load the images or the content.

I'm also trying to dynamically create a page. The short answer is, use absolute paths(starting with /) to refer all elements from clients side. See http://www.codingforums.com/showthread.php?p=784167#post784167

-Karl-
07-09-2010, 10:31 AM
That does nothing except make the images not work.

abduraooft
07-09-2010, 10:38 AM
Then you might be doing something wrong! Can't say anything without seeing a link to your page.

-Karl-
07-09-2010, 11:09 AM
http://www.runehints.com/rhnew/

That's what I have so far, as you can see. /quests, /skills, etc work.

Here's my index.php:


<?php
function HtmlOut($Str) {
return htmlentities($Str, ENT_QUOTES);
}
include ('tpl/header.tpl');

if (isset($_GET['page'])) {
if (preg_match('/^[a-zA-Z0-9-\/]+$/D', $_GET['page'])) {
$_GET['page'] = str_replace('/', '', $_GET['page']);
if (is_file('pages/'.$_GET['page'].'.php')) {
$Page=$_GET['page'];
} else {
echo '<div id="contenttitle">File Not Found</div>
<div class="news">
<h1>File not Found</h1>
<p>Unfortunately but the file "<span>'.HtmlOut($_GET['page']).'</span>" could not be found.</p>
<p>If you believe this is an error, please contact an administrator immediately.</p>
</div>';
}
} else {
$Flash='File &quote;'.HtmlOut($_GET['page']).'&quote; not found.';
}
}
if ((empty($_GET['page'])) && (!file_exists('pages/'.$Page.'.php'))) {
$Page = 'index';
}
if (is_file('pages/'.$Page.'.php') && file_exists('pages/'.$Page.'.php')) {
include('pages/'.$Page.'.php');
}

include ('tpl/sidebar.tpl');
include ('tpl/footer.tpl');

?>

abduraooft
07-09-2010, 11:17 AM
I've mentioned about the changing "all the paths" in that link in my first post. That means, your link to CSS file should be

<link href="/rhnew/css/styles.css" type="text/css" rel="stylesheet">
Making the above change will show you some progress.

Then you have to change all paths to images in the above format, say
body{margin:0;padding:0;
background: #000 url('./../images/bg-overall.jpg'); background-position: center top; background-repeat: no-repeat;font: 76% arial,sans-serif;text-align:center;}

should be changed to


body{margin:0;padding:0;
background: #000 url('/rhnew/images/bg-overall.jpg'); background-position: center top; background-repeat: no-repeat;font: 76% arial,sans-serif;text-align:center;}


Similarly for all <img>, <script>, <a> tags.

-Karl-
07-09-2010, 11:24 AM
Okay that's fine, the thing I can't get working now is the quests rewrite rule. To make www.mysite.com/quests/questname/id work correctly.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum