Bounty注意:我使用add_rewrite_rules找到了我的问题解决方案。我会奖励任何能够以apache RewriteRules格式向我提供相同解决方案的人。
我读过How can I create friendly URLs with .htaccess?,但这对我来说仍然很困难并且很复杂。
我正在运行WordPress Multisite,我有一个子域名网站cp.example.com,我正在这个子域名上编写一个php应用程序。
我的网址是这样的:
http://cp.example.com/sales.php?id=12345&userid=123456&uid=83hkuhdqhuhd873xsuhdqwiuhdiq
我是否可以通过以下方式让用户访问网站:
http://cp.example.com/sales/12345/userid/123456/83hkuhdqhuhd873xsuhdqwiuhdiq
如果我这样做,那么php仍然能够对值进行$_GET
吗?
例如$_GET['id']
,$_GET['userid']
和$_GET['uid']
?
我正在使用WordPress作为我的基础,但我正在编写应用程序结束,使用不同的表。
我试图避免使用自定义帖子类型来实现上述目标。
我尝试了以下内容。
在view_sales.php中创建模板文件view_sales.php我需要$_GET['id']
,$_GET['userid']
和$_GET['uid']
才能从mysql中检索信息。
view_sales.php
我还使用了不同的头文件并get_header('sales')
;
我已经从上面的堆栈溢出页面添加了以下代码。
$path_components = explode('/', $_GET['url']);
$id=$path_components[0];
$userid=$path_components[1];
$uid=$path_components[2];
我创建了一个带有slug销售的新wp页面,所以现在网站是 http://cp.example.com/sales/?id=123456&userid=123456&token=98917397219372iheu1i
我的.htacess
域中只有一个/public_html/example.com
网站,因为它是多站点,因此我将上面建议的代码添加到我的.htaccess
,现在看起来像这样。< / p>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
目前没有任何工作,仍然会重定向到丑陋的网址。
编辑:
我尝试了以下
RewriteCond %{HTTP_HOST} !^cp\.example\.com [NC]
RewriteRule ^listing/([a-z0-9]+)$ listing/?action=$1 [L,NC]
RewriteRule ^view/([a-z9-9]+)$ view/?id=$ [L,NC]
我尝试了以上所有的不同变体但没有任何作用。
编辑了我尝试的add_rewrite_rule方法
function pa_custom_rules() {
add_rewrite_rule('^/listing/([^/]+)/$', 'index.php?pagename=listing&action=$matches[1]', 'top');
}
add_action('init', 'pa_custom_rules');
打印重写数组,我可以看到新规则
[^/listing/([^/]+)/$] => index.php?pagename=listing&action=$matches[1]
访问index.php有效,但转到/ listing / test /失败。它返回404错误。
答案 0 :(得分:1)
最后解决了最近困扰我的问题。
看起来特定域的重写规则不起作用。
如果您想更改
Wordpress MULTISITEhttp:// 子域名 .example.com / listing? action = add (例如。或DEL或VIEW)
http:// 子域 .example.com / 添加/ (例如,或DEL或VIEW)
您必须不仅添加重写规则,而且还必须将标记重写/添加到 query_var 。
您需要添加以下功能或创建一个插件才能启动它。
function pa_custom_rules() {
add_rewrite_rule('listing/(.*)$', 'index.php?pagename=listing&action=$matches[1]', 'top');
add_rewrite_tag('%action%', '(.*)');
}
add_action('init', 'pa_custom_rules');
完成后,您将可以访问http:// 子域 .example.com / listing / 添加
在您的页面中(在这种情况下,我的页面名称为&#39;列出&#39;),您将不再收到404错误,并且您可以获得&#34; action&#34;的值(使用
添加/删除/查看) http://subdomain.example.com/listing/**add**
$a = get_query_var('action');
echo $a; //prints **add**
注意:不能使用$ _GET获取操作的值,就像RewriteRule的工作方式一样,但这应该可以完成大部分工作。
我可以继续使用wordpress并获得我所有自定义的美丽链接,并抛弃我最近3天的工作,探索Laravel和Symfony3。感谢上帝。
答案 1 :(得分:0)
我有一个像这样的网站
http://cp.example.com/sales.php?id=12345&userid=123456&uid=83hkuhdqhuhd873xsuhdqwiuhdiq我是否可以让用户通过
访问该网站http://cp.example.com/sales/12345/userid/123456/83hkuhdqhuhd873xsuhdqwiuhdiq
是的,它可能,例如:
RewriteEngine On
RewriteRule ^sales/(\d+)/userid/(\d+)/([a-z0-8]+)$ sales.php?id=$1&userid=$2&uid=$3 [L,NC]
如果我这样做的话...... php仍然可以在这上面做$ _GET 值?
例如$ _GET [&#39; id&#39;],$ _GET [&#39; userid&#39;]和$ _GET [&#39; uid&#39;]
是的,当然php可以做到这一点。