htaccess内部和外部请求的区别

时间:2011-10-17 22:11:42

标签: ajax .htaccess redirect external internal

我的.htaccess文件存在问题。我试过谷歌搜索但找不到任何有用的东西。

我有一个AJAX请求将页面加载到index.php中。触发它的链接通过jquery以“#”为前缀。因此,如果您点击链接 domain.com/foo/bar (wordpress固定链接),您将在浏览器和内容中获得 domain.com /#/ foo / bar 将通过AJAX加载。

我的问题是:由于这些是博客文章,外部链接抓住了真正的链接(domain.com/foo/bar),所以我希望它们被重定向到domain.com/#/foo/bar(因为然后ajax检查哈希并发挥其魔力。

示例here

前置的jquery代码是:

    $allLinks.each(function() {
        $(this).attr('href', '#' + this.pathname);
...

然后脚本检查

if (hash) { //we know what we want, the url is not the home page!
        hash = hash.substring(1);
        URL = 'http://' + top.location.host + hash;
        var $link = $('a[href="' + URL + '"]'), // find the link of the url
... 

现在我正在尝试将重定向与htaccess一起使用。我需要检查请求是外部还是内部

RewriteCond %{REMOTE_HOST} !^127\.0\.0\.1  #???

如果uri以“/#/”开头,这是一个问题,因为它是一个评论,那么\%23并没有真正起作用。

RewriteCond %{REQUEST_URI} !^/\%23/(.*)$ #???

如何在不影响内部AJAX内容的情况下,将外部请求从domain.com/foo/bar重定向到domain.com/#/foo/bar,以实现此目的?

2 个答案:

答案 0 :(得分:0)

我认为您的$allinks变量的分配方式与此类似:

$allinks = $('a');

请改为:

$allinks = $('a[href^="' + document.location.protocol + '//' + document.location.hostname + '"]');

这会将内部链接转换为您的hash - y样式。

答案 1 :(得分:0)

好的,我用PHP完成了这里是代码

    $path = $_SERVER["REQUEST_URI"];
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
       echo "It's ajax";
    } else {
     if(strpos($path, '/#/') === false) {
       header("Location: http://schnellebuntebilder.de/#".$path); //ONLY WORKS IF THERE IS NO BODY TAG
     }
    }

肯定有一个更好的解决方案,但是现在这样做了,因为在我的情况下,页面/ foo / bar没有包含header.php,所以没有> body< -tag和php“ header()“函数有效。如果有人知道htaccess脚本,我很想知道和学习。