我将如何更改查询字符串
file.php?id=number&string=some-words
进入这个
file/number/some-words/
我知道这个问题已被问过一百万次了,但我在这里看了很多解决方案,它们都是基于单一查询的(就像在某些东西而不是什么东西?某些东西和其他东西)。 / p>
同样一旦重写,当使用$ _GET或$ _REQUEST等时,php仍然会读取原始页面查询字符串...即使它现在显示为路径吗?
感谢任何帮助。
感谢。
答案 0 :(得分:2)
RewriteRule
采用正则表达式,它可以像您想要的那样复杂,然后是将加载文件的真实URL。您将括号括在要在正则表达式中捕获的部分周围,并且可以引用第一组$1
,第二组$2
等,在URL部分中依此类推。例如:
RewriteRule ^(\w+)/(\d+)/(.*)$ index.php?file=$1&id=$2&words=$3
这将匹配3组:
$1
,$2
,$3
可以引用这些内容,如第二部分所示,使用index.php。
唯一的问题是,如果您缺少任何一个部分,规则中的模式将不匹配。因此,您需要为每个变体设置单独的规则:
#matches all 3 parts
RewriteRule ^(\w+)/(\d+)/(.*)$ index.php?file=$1&id=$2&words=$3
#matches the first 2 parts
RewriteRule ^(\w+)/(\d+)$ index.php?file=$1&id=$2
#matches just the first part
RewriteRule ^(\w+)$ index.php?file=$1
#matches everything else
RewriteRule ^.*$ index.php
或者您可以执行通常称为bootstrapping
的操作,您可以使用单个RewriteRule
将所有内容重定向到单个php文件,如下所示:
RewriteRule ^(.*)$ index.php
然后你可以使用php来确定不同的部分是什么。在PHP内部有一个内置的服务器变量$_SERVER['REQUEST_URI']
,它将为您提供URL的URI
部分,它是域之后的所有内容和第一个斜杠,包括任何查询字符串参数。这基于用户请求的URL而不是apache重写的URL。您可以explode('/', $_SERVER['REQUEST_URI'])
获取各个部分并随意使用它们。
答案 1 :(得分:1)
您可以将代码放在Apache .htaccess文件中。这看起来像这样:
(?<=joint=)(.*)(?=^)
或者你只能使用htaccess和php:
htaccess的
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1
RewriteRule ^search/(.*)$ ./search.php?query=$1
PHP
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
它仍会读取原始页面查询字符串。