Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Apache mod_重写编码的URL_Regex_Apache_Mod Rewrite - Fatal编程技术网

Regex Apache mod_重写编码的URL

Regex Apache mod_重写编码的URL,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,我正在开发一个以URL为参数的网页,希望它能被搜索引擎轻松索引。一个要求是每个URL显示为一个目录 我的脚本采用以下格式: myscript?url=<a url>&page=1 这非常有效,除非URL正确编码时失败。以“www.google.com/finance”为例。以下是我在浏览器的地址栏中输入这些URL时发生的情况: #this works lookup/www.google.com/finance/page:1/ #this doesn't work. ur

我正在开发一个以URL为参数的网页,希望它能被搜索引擎轻松索引。一个要求是每个URL显示为一个目录

我的脚本采用以下格式:

myscript?url=<a url>&page=1
这非常有效,除非URL正确编码时失败。以“www.google.com/finance”为例。以下是我在浏览器的地址栏中输入这些URL时发生的情况:

#this works
lookup/www.google.com/finance/page:1/

#this doesn't work.  url is cut off before the ?
lookup/www.google.com/finance?foo=bar/page:1/

#doesn't match rewrite at all!
lookup/www.google.com%2Ffinance/page:1/
我不知道该怎么做。。。(.+)不应该选择任何内容吗?我是否需要告诉mod_rewrite以某种方式忽略查询参数?

尝试以下操作:

RewriteCond %{THE_REQUEST} ^GET\ /lookup/([^\s]+)/page:([0-9]+)/[?\s]
RewriteRule ^/lookup/ /myscript?url=%1&page=%2 [L]

<>但是你确实应该考虑对嵌入的URL进行正确的编码,而不是猜测它可能在哪里结束。所以
/lookup/www.google.com/finance?foo=bar/page:1/
至少应该是
/lookup/www.google.com/finance%3Ffoo=bar/page:1/
,所以
是URI路径的一部分,而不是查询的指示符。

我来试一试。谢谢你的及时回复!没有骰子。。。apache不喜欢%2F。当我把它拿出来的时候,它就起作用了。只是要澄清一下:/lookup/www.google.com/finance%3Ffoo=bar/page:1/works,但是/lookup/www.google.com/finance%2Ffoo=bar/page:1/不起作用。
#this works
lookup/www.google.com/finance/page:1/

#this doesn't work.  url is cut off before the ?
lookup/www.google.com/finance?foo=bar/page:1/

#doesn't match rewrite at all!
lookup/www.google.com%2Ffinance/page:1/
RewriteCond %{THE_REQUEST} ^GET\ /lookup/([^\s]+)/page:([0-9]+)/[?\s]
RewriteRule ^/lookup/ /myscript?url=%1&page=%2 [L]