我有这个特定的问题,我必须检查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如何工作......
答案 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文件。