因此,在使用重写规则后,我发现this interesting question使问号符号出现在$ _GET变量上。
然而,尽管我自己试图完成此任务,但我并不完全明白如何在我的网站上获得相同的结果。
这是我的重写规则:
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]
这基本上允许我将用户路由到特定的地方,而无需对我的htaccess文件上的每个页面进行硬编码,因此如果用户进入/ about / contact页面,他实际上将转到index.php?uri = /约/接触。
问题是有时候我想把问号保存在$ _GET中。让我们来说一个主题标题是"什么了?"然后我的网址会搜索/ topic / what-s-up这样的话题?并且会与什么东西相匹配?在数据库中。但是,现在,我的$ _GET变量只存储" what-s-up" (没有"?")我的数据库仍然存储" what-s-up?" (使用"?"),这可能会说实际上没有该标题的主题。
我如何保留问号/ topic / what-s-up?仍然翻译成/ topic / what-s-up?在查询字符串?
编辑:完整。用于测试用途的高级文件
Options -Indexes
DirectoryIndex index.html index.php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]
答案 0 :(得分:2)
您可以将规则更改为此选项以捕获?
参数中的可选uri
:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s/+([^?]*\??\S*)\sHTTP [NC]
RewriteRule ^(.+)$ index.php?uri=%1 [QSA,L]
由于我们还希望捕获?
,因此我们使用RewriteCond %{THE_REQUEST}
,因为RewriteRule
中的模式仅匹配REQUEST_URI。由于我们从RewriteCond
获取了价值,因此我们使用%1
代替$1
作为反向引用。
THE_REQUEST
变量表示Apache从您的浏览器收到的完整原始请求,并且在执行某些重写规则后不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1
答案 1 :(得分:-1)
我知道它晚了,但是我使用php urlencode()来传递问号,因为它可以转换?到%3F