我知道可以使用重写引擎来完成此操作,但是我无法执行此操作 这是我的.htaccess文件
/* Extra small devices (phones, 600px and down) */
@media only screen and (max-width: 600px) {...}
/* Small devices (portrait tablets and large phones, 600px and up) */
@media only screen and (min-width: 600px) {...}
/* Medium devices (landscape tablets, 768px and up) */
@media only screen and (min-width: 768px) {...}
/* Large devices (laptops/desktops, 992px and up) */
@media only screen and (min-width: 992px) {...}
/* Extra large devices (large laptops and desktops, 1200px and up) */
@media only screen and (min-width: 1200px) {...}
我有这个网址www.mysite.com/report?page=my-report-name
现在我要实现的是:www.mysite.com/report/my-report-name
我正在访问此获取变量名称页面的文件是Reports.php,它不在我的根目录中 我文件的路径是:root / themes / fount / intel / reports.php
有人可以帮忙吗?
答案 0 :(得分:1)
尝试此代码,
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
# /anything/anything -> anything.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9_])/([^/]*)$ /$1.php?url=$2 [L]
</IfModule>
如果page.php文件名始终相同,请按照以下步骤操作:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
# /page/anything -> page.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([^/]*)$ /page.php?url=$1 [L]
</IfModule>
谢谢!
答案 1 :(得分:0)
更新后的答案
要添加指向外部处理程序PHP文件的路由,应使用以下代码段:
function wprre_add_rewrite_rules() {
global $wp_rewrite;
// pattern with regexps
$wp_rewrite->add_external_rule( '^wp_report/([\w\d-]+)/?', PATH_TO_THE_EXTERNAL_HANDLER.'report.php?report_name=$1' );
}
add_action('init', 'wprre_add_rewrite_rules');
您可以发现add_external_rule()和add_rewrite_rule之间在参数处理方面存在一个差异。在这种情况下,必须使用匹配选择器,因为Apache会使用它。
此代码段必须放置在始终由您的插件或主题加载的文件中。如果您编写插件,则它可以是主插件文件。如果是主题开发,它可以是主要的functions.php文件。
自定义GET参数注册正在按原始答案中所述进行。
重要
在通过代码(外部或内部)编辑了重写规则之后,必须转到管理面板中的“永久链接”设置页面,然后单击“保存”按钮,而无需进行任何更改。这是必需的,因为这将刷新重写规则,并且WP会将规则写入.htaccess文件。
这就是为什么我建议您挂接插件激活事件并注册重写规则,然后立即运行flush_rewrite_rules()命令的原因。
注释
原始答案的问题是,仅当您路由到默认的基本index.php时,add_rewrite_rule()函数才起作用。您只能修改参数,而不能路由到外部文件。
原始答案
我认为您应该使用WordPress API来实现这一目标。您将需要使用以下语法在主题或插件中添加重写规则和标签:
!免责声明,这仅适用于路由到基本index.php!
对于路由,添加指向您的PHP文件的重写规则。
function custom_rewrite_basic() {
add_rewrite_rule('^report/([\w-]+)/?', 'index.php?page=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
如果要使用标准WP参数列表中没有的查询参数,则需要添加该自定义参数名称。
function custom_rewrite_tag() {
add_rewrite_tag('%page%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
请注意,如果您不将其用作WP API,请使用内置参数。
在此Codex文章中,您可以找到有关该主题的更多详细信息: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule
为了进行故障排除和更深入的了解,您也可以查看此Codex文章,其中描述了正确的重写规则用法。因为在某些情况下,您需要重置重写规则(激活/停用插件)。 https://codex.wordpress.org/Function_Reference/flush_rewrite_rules
答案 2 :(得分:0)
最后,此解决方案对我有用 我已经将其添加到主题文件夹中的我的functions.php文件中
function rewrite_photo_url(){
add_rewrite_rule('^report/([^/]*)/?','index.php?page_id=2671&value=$matches[1]','top');
}
function register_custom_query_vars($query_vars){
$query_vars[] = 'value';
return $query_vars;
}
add_action('init','rewrite_photo_url');
add_filter('query_vars','register_custom_query_vars');
然后在我的php文件中,我使用get_query_var('vale')来获取我的参数值