I have successfully coded URL redirection/rewriting, however, the whole thing seems to be kind of loose and unreliable and it looks like the server doesn’t in fact even ‘rewrite’.
My goal is to rewrite all URLs in the format
http://www.mydomain.com/venues/Venue_Name to
http://www.mydomain.com/venueview.php?id=### .
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^venues/(.*)$ venueview.php?url=$1 [QSA,L]
</IfModule>
This part works, however, the “(.*)$” part seems to be too loose as it allows just everything to be used. It should be restricted to letters, digits and “-“, “_”.
Also, after rewriting (?), the address bar in the browser displays the venueview.php URL which I think isn’t the idea of the whole thing, of course I would also like to have my URLs indexed by search engines in the ‘nice’ format instead of the numeric parameters.
The part in venueview.php looks like this:
if (isset($_GET['url']) && !empty($_GET['url'])) {
$url = strip_tags($_GET['url']);
$mysqli = mysqli_connect('localhost', $dbuser, $dbpasswd, $dbname);
if ($mysqli->connect_error) {
die('Connect Error ('.$mysqli->connect_errno.') '.$mysqli->connect_error);
}
$sqlstr = "SELECT id, url FROM venues WHERE url = '".$url."' LIMIT 1";
if ($results = $mysqli->query($sqlstr)){
if ($results->num_rows == 1){
$row = $results->fetch_assoc();
$id = $row['id'];
}else{
$id = -1;
}
}
$mysqli->close();
if ($id != -1)
header("Location: /venueview.phtml?vid=".$id);
}
What would I have to change in my code to make it work as intended? I’m stuck..
Rewriting is not redirecting. Redirecting is to change the incoming request to make it seem to the page that it a request was made to the page.
.*means match anything (.) any number of times (*)You need to change the pattern to match to suit what format your slugs are. If you want, say only letters to be allowed, use
[a-zA-Z].For more details on what sort of pattern your page should have a look at the Regex syntax.