我需要使一个主题内的php文件可通过url访问

时间:2011-08-23 作者:Sisir

我在这里查看了这篇帖子Making a plugin file accessible via url rewrite? 这似乎和我有同样的问题,但它是一个插件。但到目前为止,我得到了404。

add_action( \'init\', \'my_rewrite\' );
function my_rewrite() {
    global $wp_rewrite;

    add_rewrite_rule(\'/$\', \'/wp-content/themes/econ/adserver/adserver.js.php\', \'top\');
    $wp_rewrite->flush_rules(true);  
}
我有这个文件路径/wp-content/themes/econ/adserver/adserver.js.php 需要显示为http://mysite.com/adserver.js.php

UPDATE:

代码Bainternet 除了重写规则部分,give工作正常。现在,我可以使用index.php?myjs=true. 这是我的htaccess文件中的代码,你可能想看看。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

3 个回复
最合适的回答,由SO网友:Bainternet 整理而成

好的,这里有一个测试工作解决方案:

<?php
/*
Plugin Name: wpse26719
Plugin URI: http://en.bainternet.info
Description: Need to make a php file inside theme accessible via url
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/

// Register a URL that will set this variable to true
add_action(\'generate_rewrite_rules\', \'wpse26719_rw\');
function wpse26719_rw($wp_rewrite) {
   $newrules = array();
   $new_rules[\'^adserver.js.php$\'] = \'index.php?myjs=true\';
   $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}


// Add myjs as a query var
add_action( \'query_vars\', \'wpse26719_query_vars\' );
function wpse26719_query_vars( $query_vars )
{
    $query_vars[] = \'myjs\';
    return $query_vars;
}

// If this is done, we can access it later
// This example checks very early in the process:
// if the variable is set, we include our page and stop execution after it
add_action( \'parse_request\', \'wpse26719_parse_request\' );
function wpse26719_parse_request( &$wp )
{
    if ( array_key_exists( \'myjs\', $wp->query_vars ) ) {
        include( dirname( __FILE__ ) . \'/adserver.js.php\' );
        exit();
    }
}

SO网友:Otto

WP重写规则不是真正的重写,也不允许这样的重定向。所以你不能那样使用它们。幸运的是,即使您尝试,WP也应该让您参与其中。

请参阅,内部WordPress重写规则必须将URL模式更改为索引。php?键=值模式。

因此,当使用add\\u rewrite\\u rule插入不指向索引的规则时。php文件,则应该检测到这一点,并在中创建“硬”规则。htaccess文件。因此,请检查。在执行硬刷新之后访问htaccess文件,并查看新规则是否作为普通重写规则存在。如果没有,那么可能是。htaccess不可写。

SO网友:Devin Humbert

试试这个:

add_action( \'init\', \'my_rewrite\' );
function my_rewrite() {
    global $wp_rewrite;

    add_rewrite_rule(\'^adserver.js.php$\', \'/wp-content/themes/econ/adserver/adserver.js.php\', \'top\');
    $wp_rewrite->flush_rules(true);  
}
您可能应该删除$wp\\u rewrite->flush\\u rules(true);一旦它正常工作,因为这对每个页面视图都是一个巨大的性能打击。

结束

相关推荐