2017-07-10 26 views
1

我有這個特定的問題,我必須檢查的URL,如果它的一部分是8字符長哈希代碼保存在我的數據庫或其正常的網址,你想瀏覽。htaccess調用php腳本,然後繼續處理

例如,如果我寫的網址:

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

如果我寫網址:

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

我知道我必須使用htaccess的(這麼多,我管理自己),到目前爲止它看起來像這樣:

#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 

我mobile_redirect.php看起來是這樣的:

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: ".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
} 

我知道它最終會在循環中重定向。我試圖在part2之後放置part1,但仍然遇到同樣的問題。我使用Joomla和它有很多的URL(其中即時通訊不能夠寫下來),這並不是真正的目錄或文件,這就是爲什麼我不能只是在我的PHP文件中使用此解決方案:

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"); 
} 

因爲有明確在結束閱讀我的htaccess後,joomla完成了更多的url處理(我對joomla也不太瞭解)。

你們可以給我一個提示如何處理url(然後也許改變它,所以它不會在循環中結束,然後在part1恢復正常後再次更改它,因此它可以繼續處理,因爲它通常)?

此外,如果你們有什麼好的教程在那裏我可以學到這樣的事情這將是非常有益的,因爲我明白只有正則表達式的基本知識和htaccess的是如何工作的?

回答

0

如果您使用的是Joomla的大部分的確切的URL應該有這八個字符的字符串,這是一個簡單的解決方案。

只需使用普通的Joomla .htaccess文件和RewriteBase /

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

之前添加兩行但這裏的問題是,如果你有定期的Joomla URL以8性格比他們會得到很好的例如重定向ES http://example.com/lastnews

因此,對於這個網址的,你必須添加一個例外,而孔的東西會鎖定這樣的:

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

沒有辦法,如果你的腳本不使用相同的URL回的Joomla重定向在你的數據庫中找到一條記錄。您的腳本正在處理URL或Joomla的劑量。所以你必須提供一個404,或者找到一種方法在腳本中包含來自Joomla的index.php文件。

+0

因爲這是一個有點偏離主題,我寫了一個額外的命令:在這裏恕我直言,正確的方法是寫一個Joomla插件。如果找不到數據庫記錄,則不必處理重定向。 – Webdesigner