天道酬勤,学无止境

Parse question mark as normal character after mod_rewrite

So this may sound weird, however I currently have mod_rewrite set-up to pass 2 variables through.

RewriteRule ^profiel/(.*)$ index.php?p=profiel&user=$1

In the second var (&user=), it passes a username which is retrieved through GET in PHP. However, some of the usernames can have question marks in them. However if this is the case, the question mark won't be passed to the GET variable. (For example: "www.example.com/profiel/whoami?" ends up as just "whoami" instead of "whoami?")

I honestly don't know how to solve this problem. Any help would be great!

评论

You can use this rule by capturing your values directly from THE_REQUEST variable:

RewriteEngine On

RewriteCond %{THE_REQUEST} /(profiel)/(\S+)\s [NC]
RewriteRule ^profiel/ index.php?p=%1&user=%2 [L,NC]

You can use the PHP function urlencode to encode the username. For example, whoami? will become whoami%3F. So your url will become www.example.com/profiel/whoami%3F

Then to retrieve your username, you can use urldecode.

Here's the documentation on both function:

  • urlencode
  • urldecode

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Match Question Mark in mod_rewrite rule regex
    I am looking to rewrite urls with multiple substrings. One substring is being requested as a subdirectory, while any others are requested as normal query string parameters. For example, I would like to rewrite urls from http://www.mysite.com/mark/friends?page=2 to http://www.mysite.com/friends.php?user=mark&page=2 I am able to accomplish this with the exception of the question mark character. Here is my rewrite rule: ... RewriteEngine On RewriteBase / RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L] If I change the question mark to any other character it works
  • PHP 使用 mod_rewrite 获取所有参数(PHP all GET parameters with mod_rewrite)
    问题 我正在设计我的应用程序。 我应该做接下来的事情。 在 mod_rewrite 的帮助下,所有 GET 参数 (?var=value) 都应该转换为 /var/value。 我怎样才能做到这一点? 我只有 1 个 .php 文件 (index.php),因为我使用 FrontController 模式。 你能帮我解决这个 mod_rewrite 规则吗? 对不起我的英语不好。 先感谢您。 回答1 我在使用“seo-friendly”网址的网站上做类似的事情。 在 .htaccess 中: Options +FollowSymLinks RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* /index.php [L] 然后在 index.php 上: if ($_SERVER['REQUEST_URI']=="/home") { include ("home.php"); } .htaccess 规则告诉它如果找不到请求的文件或目录,则加载 index.php。 然后你只需解析请求 URI 来决定 index.php 应该做什么。 回答2 您的 .htaccess 中的以下代码将重写您的 URL,例如。 /api?other
  • 在Swift中智能搜索解析用户名无法正常工作(Smart-search for Parse Usernames in Swift not working)
    问题 我正在尝试在iOS应用中进行智能搜索,以便当用户在UISearchBar中键入字符时,结果会在搜索栏下方的表格视图中自动更新。 由于某些原因,当我在搜索栏中键入字符时,不会调用带有textDidChange的searchBar函数。 键入2个字符后调用。 因此,我的搜索结果总是比实际在搜索栏中输入的内容落后1步。 而且似乎search()函数每次被调用两次。 有任何想法吗? //FUNC: search func search(searchText: String? = nil){ if searchText == nil || searchText == "" { println("No users found.") } else { var query = PFUser.query() //MAKE CASE INSENSTIVE query!.whereKey("username", containsString: searchText!) query!.findObjectsInBackgroundWithBlock { (results, error) -> Void in if error != nil { println(error) } else { if let res = results { self.data = res as? [PFUser] } }
  • 为什么星号返回禁止页面?(Why does an asterisk return a forbidden page?)
    问题 我在 Apache/2.4.0 和 PHP/5.6.3 中使用 XAMPP,我注意到星号 (*) 作为 URL 中的第一个字符,如http://localhost/*导致 apache 返回禁止访问运行 PHP 之前的页面。 我没有注意到任何其他网站使用星号字符做任何事情,所以我知道由于某种原因它一定是无效字符,但我在上面找不到任何东西。 有人知道如何在 xampp 中覆盖它,以便我可以在 PHP 中进行自己的自定义错误管理吗? 回答1 要自定义您的错误页面: 编辑文件conf/extra/httpd-multilang-errordoc.conf 更新包含ErrorDocument 403的行,您有 3 种不同的风格: 风格 1,纯文本: ErrorDocument 403 "What are you doing here ??" 风味 2,本地重定向: ErrorDocument 403 "/error/myCustom403ErrorPage.html" 风味 3,外部重定向: ErrorDocument 403 "http://en.wikipedia.org/wiki/HTTP_403" 注意: *.conf 更新后必须重启 Apache 服务器星号是一个保留字符,Apache 使用它是因为这个原因:“在具有多个用户的系统上,可以使用 UserDir
  • 如何使用 mod_rewrite 删除 ? (问号)在 URL 中?(How can I use mod_rewrite to remove everything after the ? (question mark) in a URL?)
    问题 如何使用 mod_rewrite 删除 ? (问号)在 URL 中? 例如: http:// 127.0.0.1/ALL_FILES.php?test=1 mod_rewrite 后: http:// 127.0.0.1/ALL_FILES.php 对于 php,这意味着 $_GET 超级全局对于系统上的所有文件将始终为空。 谢谢你。 回答1 以下规则应该处理它(对于您网站上的所有URL,如上所述): RewriteCond %{QUERY_STRING} .+ RewriteRule ^(.*)$ /$1? [R=301,L] 我必须承认我有点好奇你为什么要这样做......我认为它没有太多的 SEO 价值,你可以忽略脚本中的$_GET变量吗?
  • 如何使用mod_rewrite和Apache编码特殊字符?(How to encode special characters using mod_rewrite & Apache?)
    问题 我想为我的标记系统提供漂亮的URL以及所有特殊字符: + , & , # , %和= 。 有没有办法用mod_rewrite做到这一点而不必对链接进行双重编码? 我注意到Delicious.com和stackoverflow似乎能够处理单独编码的特殊字符。 什么是魔术公式? 这是我要发生的事情的一个示例: http://www.example.com/tag/c%2b%2b 将触发以下RewriteRule: RewriteRule ^tag/(.*) script.php?tag=$1 并且tag的值为“ c ++” apache / mod_rewrite的正常操作无法像这样工作,因为它似乎将加号转换为空格。 如果我将加号加倍编码为'%252B',则可以得到理想的结果-但是,它使URL凌乱,对我来说似乎很hack。 回答1 apache / mod_rewrite的正常操作无法像这样工作,因为它似乎将加号转换为空格。 我不认为这是正在发生的事情。 Apache在路径部分将%2B解码为+ s,因为+是有效的字符。 它在让mod_rewrite查看请求之前执行此操作。 因此,然后mod_rewrite将您的请求“ / tag / c ++”更改为“ script.php?tag = c ++”。 但是在应用程序/ x-www-form-encoded格式的查询字符串组件中
  • Apache 网页与安全优化
    Apache 网页优化 网页压缩 网页缓存 Apache 安全优化 配置防盗链 隐藏版本信息 Apache 网页优化概述 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代。为了适应企业需求,就需要考虑如何提升Apache 的性能与稳定性。 优化内容 配置网页压缩功能工作模式的选择与参数优化配置防盗链配置隐藏版本号 gzip 介绍 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器。 作用 降低了网络传输的字节数,加快网页加载的速度。 节省流量,改善用户的浏览体验。 gzip与搜索引擎的抓取工具有着更好的关系。 Apache实现网页压缩的功能模块包括 mod_gzip 模块 mod_deflate 模块 Apache 1.x 没有内建网页压缩技术,但可使用第三方mod_gzip 模块执行压缩 Apache 2.x 在开发的时候,内建了mod_deflate 这个模块,取代mod_gzip mod_gzip 模块与mod_deflate 模块 两者均使用gzip压缩算法,运作原理类似 mod_deflate 压缩速度略快,而mod_gzip 的压缩比略高 mod_gzip 对服务器CPU的占用要高一些 高流量的服务器,使用mod
  • Apache:mod_rewrite:URL 中的 Spcaes 和特殊字符不起作用(Apache: mod_rewrite: Spcaes & Special Characters in URL not working)
    问题 我正在使用 APACHE:mod_rewrite 来定义一组重写 URL 的规则 我希望此链接显示为 /myDIR/walls.php?f=All&of=0&s=Newest -> All.html 所以我使用以下规则 来自 (.htaccess) 的文本 RewriteEngine on RewriteBase /myDIR/ RewriteRule ^All\.html$ papers.php?f=All&of=0&s=Newest 现在这些作为f=All of=0 s=Newest传递的变量显然被用于查询中,而且这些变量之一,即f有时具有带有空格和特殊字符的值,我无法避免因为数据库已经就位,而我正在重写 URL.... 现在当我尝试定义这样的规则时 我希望此链接显示为 /myDIR/walls.php?f=Characters & Supers&of=0&s=Newest -> Characters & Supers.html 我知道这是错误的,因为不应该有任何空格..所以为了使它正确,我定义了这样的规则 RewriteRule ^Characters%20%26%20Supers\.html$ papers.php?f=Characters%20%26%20Supers&of=0&s=Newest 它让我定义规则,但是当我单击我的链接时,我收到此404 Not
  • Apache mod_rewrite%2B和加号(+)(Apache mod_rewrite %2B and plus (+) signs)
    问题 我正在使用apache / mod_rewrite来重写URL,但是加号出现了问题。 遵循以下规则 RewriteRule ^/(.+[^/])/?$ http://localhost:8080/app/home?tag=$1 [P,L] 两个都: http://localhost/1+1 and http://localhost/1%2B2 最终成为 uri=http://localhost:8080/app/home, args=tag=1+2 因此,在这两种情况下,应用程序都会将加号转换为空格,从而无法再区分空格和加号。 如果我使用“ B”标志,则在两种情况下,+号都将转换为%2B,应用程序最终会遇到相同的问题,但结果却是相反的(空格和加号均为加号) 是否有办法让Apache正确地将%2B转义为加号而不是空格? 我读了一些有关mod_security的内容,但是我没有使用它,所以我不确定是否有其他安全机制导致此问题? 任何帮助将不胜感激! 回答1 不,这与所引用的问题不太一样。 这里的问题专门是加号,而Apache的答案是:mod_rewrite:URL中的Spcaes和特殊字符不起作用不能解决该问题。 斜线还有一个问题,请参见http://httpd.apache.org/docs/current/mod/core.html#allowencodedslashes
  • How can I use mod_rewrite to remove everything after the ? (question mark) in a URL?
    How can I use mod_rewrite to remove everything after the ? (question mark) in a URL? For instance: http:// 127.0.0.1/ALL_FILES.php?test=1 after mod_rewrite: http:// 127.0.0.1/ALL_FILES.php For php this means that the $_GET super global will always be empty for all files on the system. Thank you.
  • Mod_rewrite 麻烦:想直接从 ?= 到一个平面链接,似乎没有任何作用(Mod_rewrite trouble: Want to direct from ?= to a flat link, nothing seems to work)
    问题 我有一个网站,目前以example.com/index.php?show=foo提供结果,我希望它阅读example.com/show/foo 。 我的理解是这将使它们对搜索引擎机器人可见,并且似乎比创建几百个 html 文件更简单的方法... 我尝试了以下 .htaccess 代码: Options +FollowSymLinks RewriteEngine on RewriteRule ^show/(.*)$ index.php?show=$1 [NC,L] 不说。 也试过这个,我在另一个堆栈溢出问题上找到了它: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)/?$ /index.php?show=$1 [L] </IfModule> 关于我在这里缺少什么的任何想法? 回答1 请注意^([0-9A-Za-z]+)/?$将尝试匹配仅包含可选以斜杠结尾的字母数字字符的请求 URI。 因此 URI show/foo将不会匹配,因为末尾有更多字符(即,在斜杠之后,表达式期望找到字符串的末尾)。 尝试:
  • CodeIgniter PHP框架-需要获取查询字符串(CodeIgniter PHP Framework - Need to get query string)
    问题 我正在使用CodeIgniter创建一个电子商务网站。 我应该如何获取查询字符串? 我正在使用Saferpay付款网关。 网关响应将如下所示: http://www.test.com/registration/success/?DATA=<IDP+MSGTYPE%3D"PayConfirm"+KEYID%3D"1-0"+ID%3D"KI2WSWAn5UG3vAQv80AdAbpplvnb"+TOKEN%3D"(unused)"+VTVERIFY%3D"(obsolete)"+IP%3D" 123.25.37.43"+IPCOUNTRY%3D"IN"+AMOUNT%3D"832200"+CURRENCY%3D"CHF"+PROVIDERID%3D"90"+PROVIDERNAME%3D"Saferpay+Test+Card"+ACCOUNTID%3D"99867-94913159"+ECI%3D"2"+CCCOUNTRY%3D"XX"%2F>&SIGNATURE=bc8e253e2a8c9ee0271fc45daca05eecc43139be6e7d486f0d6f68a356865457a3afad86102a4d49cf2f6a33a8fc6513812e9bff23371432feace0580f55046c 为了处理响应,我需要获取查询字符串数据。 抱歉
  • 使用有限状态机原理实现英文分词
    使用有限状态机原理实现英文分词 提出问题 使用Python开发一个英文句子分词程序,把一段英文句子切分为每一个单词。不能导入任何官方的或者第三方的库,也不能使用字符串的split()方法。 代码是如何一步一步恶化的 单词与空格 对于只有单词和空格,不含其他符号的英语句子,可以使用空格来切分单词。于是对于句子I am kingname, 一个字符一个字符的进行遍历。首先遍历到I,发现它是一个字母,于是把它存到一个变量word中,然后遍历到空格,于是把变量word的值添加到变量word_list中,再把word清空。接下来遍历到字母a,又把a放到变量word中。再遍历到m,发现它还是一个字母,于是把字母m拼接到变量word的末尾。此时变量word的值为am。再遍历到第二个空格,于是把word的值添加到word_list中,清空word。 最后,由于第三个单词kingname的末尾没有空格,所以需要手动把它添加到列表word_list中。 完整的代码如下: def split(target): if not target: return [] word_list = [] word = '' for letter in target: if letter == ' ': word_list.append(word) word = '' else: word += letter
  • 嵌入双引号的 CSV 解析(CSV parsing for embedded double quotes)
    问题 我编写了一个简单的 CSV 文件解析器。 但是在查看了 CSV 格式的 wiki 页面后,我注意到基本格式的一些“扩展”。 特别是通过双引号嵌入逗号。 我已经设法解析了这些,但是还有第二个问题:嵌入式双引号。 例子: 12345,"ABC,""IJK"" XYZ" -> [1234] 和 [ABC, "IJK" XYZ] 我似乎找不到正确的方法来区分封闭的双引号和无双引号。 所以我的问题是解析上述 CVS 格式的正确方法/算法是什么? 回答1 我通常考虑的方式基本上是将引用的值视为单个、未引用的值或一系列双引号值,这些值形成由引号连接的值。 那是, 解析行中的下一个原子: 读到第一个非空白字符如果当前字符不是引号: 标记当前位置读到下一个逗号或换行符返回标记和逗号前字符之间的文本(如果合适,去掉空格) 如果当前字符是引号: 创建一个空字符串缓冲区而当前字符不是引号标记当前位置+1(跳过引号字符) 阅读下一个报价如果缓冲区不为空,则为其附加引号将标记和当前位置之前的字符之间的文本附加到缓冲区(去除两个引号) 前进一个字符(经过刚刚阅读的报价) 读到下一个逗号或换行符返回缓冲区 本质上,拆分引用字符串的每个双引号段,然后用引号将它们连接在一起。 因此: "ABC, ""IJK"" XYZ"变成ABC, , IJK , XYZ ,这又变成ABC, "IJK" XYZ 回答2
  • 单引号的HTML代码(HTML code for an apostrophe)
    问题 看似简单,但我在网上找不到任何相关内容。 撇号的正确HTML代码是什么? 是’ ? 回答1 如果您要查找单引号,则为 ' 回答2 List Apart对HTML中的字符和排版有很好的参考。 根据该文章,撇号的正确HTML实体为’ 。 使用示例:“”。 回答3 是&apos; 。 如msanders所述,这实际上是XML和XHTML,但未在HTML4中定义,因此我猜想使用' 在这种情况下。 我站得住了。 回答4 取决于其撇号你在谈论:有&apos; , ‘ , ’ 可能还有其他许多选项,具体取决于您要编写的上下文和语言。 并且使用已声明的字符编码(例如UTF-8),您还可以将它们直接写入HTML中: ' , ' , ' 。 回答5 一组符合标准且易于记忆的html引号,从正确的单引号开始,该引号通常用作撇号: 正确的单引号- ’ —' 左单引号- ‘ —' 右双引号- ” —” 左双引号- “ —“ 回答6 首先,看起来‘ 应该避免-的诅咒 其次,如果您有机会生成要通过AJAX调用返回的标记,则应避免使用实体名称(因为并非所有HTML实体在XML中都是有效的),请使用&#XXXX; 语法代替。 否则可能会导致标记被视为无效的XML。 最可能受此影响的实体是&nbsp ;,应替换为&#160; 回答7 这是HTML Ascii代码的重要参考: http://www.ascii
  • 在.htaccess中添加评论(Adding comments to .htaccess)
    问题 为什么这样做: RewriteRule (.+)/$ $1 和这项工作: RewriteRule (.+)/$ $1 [L] #bla bla bla 但这不起作用: RewriteRule (.+)/$ $1 #bla bla bla 回答1 在.htaccess注释必须对自己的路线,不附加其他声明。 最后一条规则不起作用,因为注释不是真正的注释。 htaccess中的注释必须以#开头(必须在行的开头),而不能在任何地方任意。 在第二种情况下, #bla bla bla被解释为RewriteRule指令的第四个参数,该参数将被忽略。 在最后一种情况下, #bla bla bla被解释为第3个参数,在RewriteRule的情况下,标志位于其中,而#bla bla bla不是mod_rewrite可以理解的任何标志,因此会出现错误。 回答2 Apache的配置文件格式( .htaccess文件是其中的一个示例)在技术上不支持内联注释,而仅支持全行注释(即以#开头的行)。 以井号字符“#”开头的行被视为注释,并被忽略。 配置指令后的行中可能不能包含注释。 -官方Apache 2.4手册 但是,令人困惑的是,每个模块都可以按自己喜欢的方式来解析其指令的输入-因此mod_rewrite决定如何处理以RewriteRule开头的任何行 我不确定,但是我的猜测是mod
  • htaccess mod_rewrite(htaccess mod_rewrite)
    问题 每当我转到类似以下的页面时,我都会尝试添加一些内容: http://www.example.com/character.php?id=3 我希望将mod更改为: http://www.example.com/character/Jim_Carrey 当然,哪一个ID是字符名称的行... 对于这样的示例……我尝试使用它,但是似乎并没有获得htaccess的大部分成果,因为我实际上并未与.htaccess过很多合作。 回答1 实际上是相反的方式: 在您的网站上,以您希望它们看起来的方式编写所有链接。 例如http://www.site.com/character/Jim_Carrey 在您的数据库中,添加一个字段,通常称为“ slug”或“ post_slug”,该字段引用URL的Jim_Carrey”部分。它必须是唯一元素,在很大程度上类似于主键。因此,请确保您拥有该函数确实负责根据给定的字符串(例如,帖子标题)创建子弹,并确保没有重复项。 然后在您的.htaccess(在根文件夹中)中执行以下操作RewriteEngine On RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC] 最后,在character.php脚本中,您不是针对ID,而是针对post_slug字段进行数据库查询。 回答2
  • How to encode special characters using mod_rewrite & Apache?
    I would like to have pretty URLs for my tagging system along with all the special characters: +, &, #, %, and =. Is there a way to do this with mod_rewrite without having to double encode the links? I notice that delicious.com and stackoverflow seem to be able to handle singly encoded special characters. What's the magic formula? Here's an example of what I want to happen: http://www.example.com/tag/c%2b%2b Would trigger the following RewriteRule: RewriteRule ^tag/(.*) script.php?tag=$1 and the value of tag would be "c++" The normal operation of apache/mod_rewrite doesn't work like this, as it
  • Sqli-labs 基本注入篇 (Less1~22)
    前言 本blog作为练习笔记, 文笔不才, 仅供参考, 不正之处望大神指正。 基本注入篇对应labs的1~22关: 目录 Sqli-labs 基本注入篇 Less-1 单引号显错注入 一、手工注入 1. 判断字符型与整数型注入 2. 爆字段数 3. 爆库爆表爆字段 4. 取对应字段的值 二、sqlmap自动注入 1. 检测目标网站存在的注入漏洞类型 2. 爆库 3. 爆表 4. 爆字段 5. 爆数据 Less-2 整数型显错注入 1. 依旧先判断是整数型还是字符型注入: 2. 剩下的注入和Less-1如出一辙。不再赘述... Less-3 字符型变形显错注入 1. 判断是字符型注入 2. 接下来就如出一辙了 Less-4 字符型双引号显错注入 Less-5 字符型单引号双注入 1. 布尔盲注 2. 延时注入 Less-6 字符型双引号双注入 Less-7 文件写入注入 补充: Less-8 字符型单引号布尔盲注 Less-9 字符型单引号延时盲注 Less-10 字符型双引号延时盲注 中场休息 Less-11 单引号显错注入 一、手工注入 二、sqlmap自动注入(post型) Less-12 双引号显错变形注入 Less-13 单引号字符型变形双注入 Less-14 单引号字符型变形双注入 Less-15 单引号布尔盲注、延时注入 Less-16 双引号布尔盲注、延时注入
  • PHP 中的正则表达式解析器?(A parser for regular expressions in PHP?)
    问题 我需要在 PHP 中将正则表达式解析为它们的组件。 我创建或执行正则表达式没有问题,但我想显示有关正则表达式的信息(例如,列出捕获组,将重复字符附加到其目标,...)。 整个项目是一个 WordPress 插件,它提供有关重写规则的信息,这些规则是具有替换模式的正则表达式,并且可能难以理解。 我自己编写了一个简单的实现,它似乎可以处理我抛出的简单正则表达式并将它们转换为语法树。 在我扩展这个例子以支持更多的正则表达式语法之前,我想知道是否有其他好的实现我可以看看。 实现语言并不重要。 我假设大多数解析器都是为了优化匹配速度而编写的,但这对我来说并不重要,甚至可能会妨碍清晰度。 回答1 我是 Debuggex 的创建者,他的要求与您的非常相似:针对可以显示的信息量进行优化。 下面是 Debuggex 使用的解析器中经过大量修改(为了可读性)的片段。 它不能按原样工作,但旨在演示代码的组织。 大多数错误处理已被删除。 许多简单但冗长的逻辑也是如此。 请注意,使用了递归下降。 这就是你在你的解析器中所做的,除了你的被压缩成一个单一的函数。 我大致使用了这个语法: Regex -> Alt Alt -> Cat ('|' Cat)* Cat -> Empty | (Repeat)+ Repeat -> Base (('*' | '+' | '?' |