htaccess调用php脚本然后继续处理

时间:2017-07-10 12:57:25

标签: php apache .htaccess mod-rewrite joomla

我有这个特定的问题,我必须检查URL,如果它的部分是保存在我的数据库中的8个字符长的哈希码或者它想要导航的普通URL。

例如,如果我写url:

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

如果我写url:

-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,它有许多网址(我不能写下来),这不是真正的目录或文件,这就是为什么我不能在我的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");
}

因为joomla在读完我的htaccess之后显然有更多的url处理(我也不太了解joomla)。

你们可以给我一个如何处理网址的提示(然后可能会改变它以便它不会在循环中结束然后在part1恢复正常之后再次改变它以便它可以继续正常处理)?< / p>

另外,如果你们有任何好的教程,我可以学习这些东西,那将非常有帮助,因为我只了解正则表达式的基础知识以及htaccess如何工作......

1 个答案:

答案 0 :(得分:0)

如果你在大多数网址上使用Joomla,那么应该有一个应该有这个八个字符串的网址,这是一个简单的解决方案。

只需使用常规的Joomla .htaccess文件,然后在RewriteBase /之前添加两行

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

但问题在于,如果你在Joomla中有8个字符的常规URL,那么它们将被重定向。 http://example.com/lastnews

所以对于这个URL,你必须添加一个异常,并且这个东西会像这样锁定:

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文件。