我已经看到了其他几个类似的问题,但答案对我不起作用。希望有人能说清楚。
我有一个类似http://website.com/show/?id=9999
的网址,我在页面上的PHP脚本中使用$_GET['id']
。当我使用重写规则将网址转换为http://website.com/show/9999/
时,$_GET['id']
不再有效。
以下是我使用的重写规则:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^show/(.*)$ /show/?id=$1 [NC,L,QSA]
答案 0 :(得分:1)
尔加!固定它。我遗漏了一个关键信息,即http://website.com/show/
也通过WordPress永久链接引擎重写。 " L"我的规则中的标志是阻止WordPress重写规则再次拾取目标。
答案 1 :(得分:0)
你不想要那些重写条件。你只需要规则。这应该有效:
RewriteEngine On
RewriteRule ^show/([^/]*)$ /show/?id=$1 [L]
答案 2 :(得分:0)
$_GET['id']
不再有效,因为id
参数不再是get字符串的一部分。 apache重写发生在Web堆栈的下层而不是php操作,这意味着在php接管时根本不再有$_GET
字符串。您可以使用var_dump($_GET);
对此进行测试,并亲眼看看。
如上所述,可以通过以下方式通过$_SERVER['REQUEST_URI']
访问它:
$params = explode('/', $_SERVER['REQUEST_URI']);
var_dump($params[0]); //This should print "show"
var_dump($params[1]); //This should print "9999"
您需要能够预测URL的哪个部分与您执行此操作所需的值相对应。这通常是路由器的工作。