2017-07-10 4 views
1

Ich habe dieses spezifische Problem, wo ich URL überprüfen muss, wenn sein Teil ist 8 Zeichen lang Hash-Code, der in meiner Datenbank oder seine nur normale URL gespeichert ist, wo Sie navigieren möchten.htaccess Anruf php Skript, dann weiter Verarbeitung

Zum Beispiel, wenn ich schreibe url:

- www.example.com/A4s8Gga3 
i want to process it with my script in php file 

Und wenn ich url schreiben:

-www.example.com/my-books 
-www.example.com/about 
i want to navigate on those pages. 

Ich weiß, ich habe .htaccess zu verwenden (so viel konnte ich mich) und so weit es aussieht wie folgt aus:

#part1 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} (\/\w+)$ [NC] 
RewriteRule ^(.*)$ mobile_redirect.php [L] 

#part2 
RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php 

Meine mobile_redirect.php wie folgt aussieht:

Ich weiß, dass es am Ende in Schleife umleiten wird. Ich habe versucht, part1 nach part2 und habe immer noch das gleiche Problem. Ich bin mit joomla und es viele Urls haben (die nicht in der Lage im, aufzuschreiben), die nicht real Verzeichnisse oder Dateien sind deshalb habe ich nur in meinem PHP-Datei mit dieser Lösung kann nicht:

ob_start(); 

require_once('connect.php'); 

$request = $_SERVER['REQUEST_URI']; 
$request_hotovy = str_replace('/', '', $request); 
$request_hotovy = mysql_real_escape_string($request_hotovy); 

$select = "SELECT HASH_ID,OFFER FROM kasko_send_form WHERE MOBILE_HASH_ID = '".$request_hotovy."'"; 
$query = mysql_query($select); 
if(mysql_num_rows($query) > 0){ 
    // request is mobile hash id 
    $result = mysql_fetch_array($query); 
    $hash_id = $result['HASH_ID']; 
    header("Location: some_link?def=".$hash_id); 
} else { 
    // request is normal url 
    header("Location: page_not_found.php"); 
} 

Da es klar ist mehr URL-Verarbeitung in Joomla getan, nachdem es endet lesen meine HTAccess (ich weiß nicht viel über Joomla entweder).

Können Sie mir einen Tipp geben, wie man die URL verarbeitet (dann vielleicht ändern, so dass es nicht in Schleife enden wird und dann wieder nach dem part1 wieder normal ändert, damit es normal weiterarbeiten kann)?

Auch wenn euch irgendwelche gute Tutorials, wo ich solche Dinge könnte, wäre es wirklich hilfreich sein, weil ich nur Grundlagen der regex verstehen und wie htaccess funktioniert ...

Antwort

0

Wenn Sie Joomla für die meisten Ihre URLs stimmen genau mit denen überein, die diese acht Zeichen haben sollten, dafür gibt es eine einfache Lösung.

Verwenden Sie einfach die regelmäßigen Joomla .htaccess-Datei und fügen Sie zwei Zeilen vor RewriteBase /

RewriteCond %{REQUEST_URI} ^/[A-Za-z0-9]{8}$ 
RewriteRule .* mobile_redirect.php [L] 

Aber das Problem hier ist, dass, wenn Sie regelmäßig URLs in Joomla mit 8 Zeichen haben, als sie es gut beispielsweise umgeleitet werden würde http://example.com/lastnews

Also für diese URL Sie haben eine Ausnahme hinzuzufügen, und das Loch etwas wie diese sperren würde:

RewriteCond %{REQUEST_URI} !^/latesnews$ [NC] 
RewriteCond %{REQUEST_URI} !^/youandme$ [NC] 
RewriteCond %{REQUEST_URI} ^/[A-Za-z0-9]{8}$ 
RewriteRule .* mobile_redirectt.php [L] 

Es gibt keine Möglichkeit, mit der gleichen URL zu Joomla zu umleiten zurück, wenn Ihr Skript nicht tun finde einen Datensatz in deiner DB. Entweder behandelt Ihr Skript die URL oder Joomla dosiert sie. Sie müssen also einen 404 bereitstellen oder eine Möglichkeit finden, die index.php-Datei von Joomla in Ihr Skript aufzunehmen.

+0

Da dies ein wenig off topic ist schreibe ich einen zusätzlichen Befehl: Der richtige Weg hier IMHO wäre ein Joomla Plugin zu schreiben. Dann müssen Sie sich nicht mit der Umleitung befassen, wenn Sie keinen DB-Datensatz finden. – Webdesigner

Verwandte Themen