mod_rewrite:将path和查询stringURL作为parameter passing(获取path中"a.java"子字符串)
25-03-03
13
在本文中,我们将为您详细介绍mod_rewrite:将path和查询stringURL作为parameterpassing的相关知识,并且为您解答关于获取path中"a.java"子字符串的疑问,此外
在本文中,我们将为您详细介绍mod_rewrite:将path和查询stringURL作为parameter passing 的相关知识,并且为您解答关于获取path中"a.java"子字符串 的疑问,此外,我们还会提供一些关于Apache mod_rewrite RewriteRule禁止字、Apache No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed、Apache 相关 mod_rewrite ,RewriteCond,{HTTP_HOST}、Apache:mod_rewrite:Spcaes&特殊字符在URL不起作用 的有用信息。
本文目录一览:
mod_rewrite:将path和查询stringURL作为parameter passing(获取path中"a.java"子字符串)
我使用mod_rewrite将相当URL重写为Spring 2.5应用程序支持的表单。
eg /category/cat1?q=x => /controller?category=cat1&q=x
然而,从我的控制器我想知道请求来自原始URL(所以我可以生成一个链接,如果需要的话)。 所有页面都需要这种方法,因此很难进行硬编码。
我如何从我的控制器访问原始path+查询string?
我曾尝试使用$ 0来包含完整的path,但是这不包括查询string。 我不能只追加path和查询string,因为这会导致path的一些部分被添加为参数/category/cat1?category=cat1&q=x请注意添加了不需要的&category=cat1参数,这会导致URL不再与浏览器发送的URL匹配。
需要使用一个参数或另一个getopts
如何通过感叹号在Linux上的参数?
Unix中的包装函数参数是否有限制?
如何在Spike(riscv)中指定内核参数?
如何通过参数子项设置Windows服务“命令行”参数?
我希望mod_rewrite将让我引用完整的url,并将其编码为一个参数,所以我的规则可能看起来像:
RewriteRule /category/(.+) /controller?category=$1&_originalUrl=${escape:$0}?${escape:<original query string>} [QSA]
使用我的原始示例,传递给我的控制器的最终结果是:
/controller?category=cat1&_originalUrl=%2Fcategory%2Fcat1%3Fsearch%3Dx&search=x
重要的部分是&_originalUrl的值应该是%2Fcategory%2Fcat1%3Fsearch%3Dx ,它的非转义版本是/category/cat1?q=x (从浏览器发送的原始请求URL)。
任何build议欢迎,提前致谢!
带Nginx参数的Laravel是空的
在C中使用ShellExecute()打开一个.txt的正确方法是什么?
使用参数调用powershell函数
如何在不限制参数数量的函数中传递参数?
在一个sed脚本中使用命令replace,使用参数
查询可以用RewriteCond测试,因为RewriteRule只测试URL路径 。 看Jonathan Feinberg的例子是怎么做的。
但是你也可以设置QSA标志 ,旧的查询会自动附加到新的:
RewriteRule ^/category/([^/]+)$ /controller?category=$1 [QSA]
编辑 为了回应你对这个问题的评论:如果你想得到初始的请求URI路径和查询,你需要从请求行 ( THE_REQUEST变量)中提取它:
RewriteCond %{THE_REQUEST} ^[AZ]+ ([^s]+) RewriteRule ^/category/([^/]+)$ /controller?category=$1&_originalUrl=%1 [QSA]
但是在大多数语言中都有一个具有相同信息的环境变量。
您必须在初始的单独步骤中捕获查询字符串。
RewriteCond %{query_string} ^q=([^&]+) RewriteRule ^/category/(cat1)$ /controller?category=$1&q=%1
等等
有可以使用的主机头? 对不起,如此含糊,但最后一次我不得不这样做是使用PHP(呃,不要问),我想我们是如何做到这一点 – 例如REQUEST_URI( http://www.askapache.com/htaccess/mod_rewrite-变量 – cheatsheet.html )
你也可以在rewrite中设置一个主机头( http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html )
例如:
ReWriteRule /category/(cat1)?q=(x) /controller?category=$1&q=$2 [E=FOO:....]
(不,我完全不是一个mod改写忍者)
总结
以上是小编为你收集整理的mod_rewrite:将path和查询stringURL作为parameter passing全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Apache mod_rewrite RewriteRule禁止字
如何解决Apache mod_rewrite RewriteRule禁止字?
我刚刚找到了RewriteRule禁止的单词: filmi (斯洛文尼亚语为 movies )。
更加具体:
如果我设置了
RewriteRule ^filmi/novFilm/?$ index.PHP?stran=novFilm
,然后访问 mydomain.example / filmi / novFilm,我得到未找到 响应。我尝试过的其他代替 filmi 的作品。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Apache No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed 更换ssl证书后,重启Apache失败。
查看Apache的error日志发现:
复制代码 代码如下:
[Fri May 20 18:07:23 2011] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
[Fri May 20 18:08:22 2011] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
[Fri May 20 18:13:50 2011] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
[Fri May 20 18:13:52 2011] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
解决方法:
复制代码 代码如下:
#重新写入一些活动信号量集的信息
ipcs -s | grep apache | perl -e ''while (<stdin>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}''
</stdin>
参考链接:
http://carlosrivero.com/fix-apache—no-space-left-on-device-couldnt-create-accept-lock
Apache 相关 mod_rewrite ,RewriteCond,{HTTP_HOST}
1.给子域名 加www标记
<span RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.<span com$ [NC]
RewriteCond </span>%{HTTP_HOST} !^www\.<span [NC]
RewriteRule </span>.? http:<span //</span><span www.%1example.com%{REQUEST_URI} [R=301,L] </span>
这个规则抓取二级域名的%1变量,如果不是以www开始,那么就加www,以前的域名以及{REQUEST_URI}会跟在其后。</span> 登录后复制
2.去掉域名中的www标记
<span RewriteCond %{HTTP_HOST} !^example\.<span com$ [NC]
RewriteRule </span>.? http:<span //</span><span example.com%{REQUEST_URI} [R=301,L] </span></span> 登录后复制
3.去掉www标记,但是保存子域名
<span RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?example\.<span com)$ [NC]
RewriteRule </span>.? http:<span //</span><span %1%{REQUEST_URI} [R=301,L] </span>
这里,当匹配到1%变量以后,子域名才会在%2(内部原子)中抓取到,而我们需要的正是这个%1变量。 </span> 登录后复制
4.防止图片盗链
<span <span 一些站长不择手段的将你的图片盗链在他们网站上,耗费你的带宽。你可以加一下代码阻止这种行为。
RewriteCond </span>%{HTTP_REFERER} !^<span $
RewriteCond </span>%{HTTP_REFERER} !^http:<span //</span><span (www\.)?example\.com/ [NC] </span>
RewriteRule \.(gif|jpg|png)$ -<span [F]
如果{HTTP_REFERER}值不为空,或者不是来自你自己的域名,这个规则用[F]FLAG阻止以gif</span>|jpg|<span png 结尾的URL
如果对这种盗链你是坚决鄙视的,你还可以改变图片,让访问盗链网站的用户知道该网站正在盗用你的图片。
RewriteCond </span>%{HTTP_REFERER} !^<span $
RewriteCond </span>%{HTTP_REFERER} !^http:<span //</span><span (www\.)?example\.com/.*$ [NC] </span>
RewriteRule \.(gif|jpg|png)$ 你的图片地址 [R=301,<span L]
除了阻止图片盗链链接,以上规则将其盗链的图片全部替换成了你设置的图片。
你还可以阻止特定域名盗链你的图片:
RewriteCond </span>%{HTTP_REFERER} !^http:<span //</span><span (www\.)?leech_site\.com/ [NC] </span>
RewriteRule \.(gif|jpg|png)$ - [F,<span L]
这个规则将阻止域名黑名单上所有的图片链接请求。
当然以上这些规则都是以{HTTP_REFERER}获取域名为基础的,如果你想改用成IP地址,用{REMOTE_ADDR}就可以了。</span></span> 登录后复制
5.如果文件 不存在重定向到404页面
<span <span 如果你的主机没有提供404页面重定向服务,那么我们自己创建。
RewriteCond </span>%{REQUEST_FILENAME} !-<span f
RewriteCond </span>%{REQUEST_FILENAME} !-<span d
RewriteRule </span>.? /404.<span php [L]
这里</span>-f匹配的是存在的文件名,-d匹配的存在的路径名。这段代码在进行404重定向之前,会判断你的文件名以及路径名是否存在。你还可以在404页面上加一个?url=<span $1参数:
RewriteRule </span>^/?(.*)$ /404.php?url=$1<span [L]
这样,你的404页面就可以做一些其他的事情,例如默认信心,发一个邮件提醒,加一个搜索,等等。</span></span> 登录后复制
6.重命名目录
<span <span 如果你想在网站上重命名目录,试试这个:
RewriteRule </span>^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,<span L]
在规则里我添加了一个“</span>.”(注意不是代表得所有字符,前面有转义符)来匹配文件的后缀名。 </span> 登录后复制
7.将.html 后缀名转换成.php
<span 前提是.<span html文件能继续访问的情况下,更新你的网站链接。
RewriteRule </span>^/?([a-z/]+)\.html$ $1.<span php [L]
这不是一个网页重定向,所以访问者是不可见的。让他作为一个永久重定向(可见的),将FLAG修改[R</span>=301,L]。 </span> 登录后复制
8.创建无文件后缀名链接
<span 如果你想使你的PHP网站的链接更加简洁易记-或者隐藏文件的后缀名,试试这个:<span
RewriteRule </span>^/?([a-z]+)$ $1.<span php [L]
如果网站混有PHP以及HTML文件,你可以用RewriteCond先判断该后缀的文件是否存在,然后进行替换:
RewriteCond </span>%{REQUEST_FILENAME}.php -<span f
RewriteRule </span>^/?([a-zA-Z0-9]+)$ $1.<span php [L]
RewriteCond </span>%{REQUEST_FILENAME}.html -<span f
RewriteRule </span>^/?([a-zA-Z0-9]+)$ $1.<span html [L]
如果文件是以</span>.php为后缀,这条规则将被执行。</span> 登录后复制
9.检查查询变量里的特定参数
<span <span 如果在URL里面有一个特殊的参数,你可用RewriteCond鉴别其是否存在:
RewriteCond </span>%{QUERY_STRING} !uniquekey=<span
RewriteRule </span>^/?script_that_requires_uniquekey\.php$ other_script.php [QSA,<span L]
以上规则将检查{QUERY_STRING}里面的uniquekey参数是否存在,如果{REQUEST_URI}值为script_that_requires_uniquekey,将会定向到新的URL。 </span></span> 登录后复制
10.删除查询变量
<span <span Apache的mod_rewrite模块会自动辨识查询变量,除非你做了以下改动:
a)</span>.分配一个新的查询参数(你可以用[QSA,<span L]FLAG保存最初的查询变量)
b)</span>.在文件名后面加一个“?”(比如index.php?)。符号“?”不会在浏览器的地址栏里显示。</span> 登录后复制
11.用新的格式展示当前URI
<span 如果这就是我们当前正在运行的URLs:/index.php?id=nnnn。我们非常希望将其更改成/nnnn并且让搜索引擎以新格式展现。首先,我们为了让搜索引擎更新成新的,得将旧的URLs重定向到新的格式,但是,我们还得保证以前的index.<span php照样能够运行。是不是被我搞迷糊了?
实现以上功能,诀窍就在于在查询变量中加了一个访问者看不到的标记符“marker”。我们只将查询变量中没有出现“marker”标记的链接进行重定向,然后将原有的链接替换成新的格式,并且通过[QSA]FLAG在已有的参数加一个“marker”标记。以下为实现的方式:
RewriteCond </span>%{QUERY_STRING} !<span marker
RewriteCond </span>%{QUERY_STRING} id=([-a-zA-Z0-9_+]+<span )
RewriteRule </span>^/?index\.php$ %1? [R=301,<span L]
RewriteRule </span>^/?([-a-zA-Z0-9_+]+)$ index.php?marker &id=$1<span [L]
这里,原先的URL:http</span>:<span //</span><span www.example.com/index.php?id=nnnn,不包含marker,所以被第一个规则永久重定向到http://www.example.com/nnnn,第二个规则将http://www.example.com/nnnn反定向到http://www.example.com/index.php?marker&id=nnnn,并且加了marker以及id=nnnn两个变量,最后mod_rewrite就开始进行处理过程。</span>
第二次匹配,marker被匹配,所以忽略第一条规则,这里有一个“.”字符会出现在http:<span //</span><span www.example.com/index.php?marker &id=nnnn中,所以第二条规则也会被忽略,这样我们就完成了。</span>
注意,这个解决方案要求Apache的一些扩展功能,所以如果你的网站放于在共享主机中会遇到很多障碍。</span> 登录后复制
12.保证安全服务启用
<span <span Apache可以用两种方法辨别你是否开启了安全服务,分别引用{HTTPS}和{SERVER_PORT}变量:
RewriteCond </span>%{REQUEST_URI} ^secure_page\.<span php$
RewriteCond </span>%{HTTPS} !<span on
RewriteRule </span>^/?(secure_page\.php)$ https:<span //</span><span www.example.com/$1 [R=301,L] </span>
以上规则测试{REQUEST_URI}值是否等于我们的安全页代码,并且{HTTPS}不等于on。如果这两个条件同时满足,请求将被重定向到安全服务URI.<span 另外你可用{SERVER_PORT}做同样的测试,443是常用的安全服务端口
RewriteCond </span>%{REQUEST_URI} ^secure_page\.<span php$
RewriteCond </span>%{SERVER_PORT} !^443<span $
RewriteRule </span>^/?(secure_page\.php)$ https:<span //</span><span www.example.com/$1 [R=301,L]</span></span> 登录后复制
13.在特定的页面上强制执行安全服务
<span <span 遇到同一个服务器根目录下分别有一个安全服务域名和一个非安全服务域名,所以你就需要用RewriteCond 判断安全服务端口是否占用,并且只将以下列表的页面要求为安全服务:
RewriteCond </span>%{SERVER_PORT} !^443<span $
RewriteRule </span>^/?(page1|page2|page3|page4|page5)$ https:<span //</span><span www.example.com/%1[R=301,L] </span>
<span 以下是怎样将没有设置成安全服务的页面返回到80端口:
RewriteCond </span>%{ SERVER_PORT } ^443<span $
RewriteRule </span>!^/?(page6|page7|page8|page9)<span $http</span>:<span //</span><span www.example.com%{REQUEST_URI} [R=301,L]<br /><br /> <br /></span></span> 登录后复制
Apache:mod_rewrite:Spcaes&特殊字符在URL不起作用 我正在使用APACHE:mod_rewrite来定义一组重写URLS的规则
我想这个链接显示为
/myDIR/walls.PHP?f=All&of=0&s=Newest > All.html
所以我使用以下规则
在Apache中使用带有中文字符的mod_rewrite
如何replaceHTTP请求URI中的特殊字符?
作为Upstart服务启动时,无法读取UTF-8文件名
c + +不能将string转换为wstring
如何在批处理中的echo命令中使用重音字符?
来自(.htaccess)的文本
RewriteEngine on RewriteBase /myDIR/ RewriteRule ^All.html$ papers.PHP?f=All&of=0&s=Newest
现在这些variables被传递为f=All of=0 s=Newest这些被用于查询,显而易见,并且这些variables之一,即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找不到错误“请求的URL / wallz /字符&Supers.html在此服务器上找不到”。
问题: 该怎么办?
我的猜测是我不应该在.htaccess中进行HTML URL编码
无法通过PowerShell在文本文件中使用加号“+”来编辑/replacestring值
Windows批处理函数从参数中删除特殊字符
如何将回车作为字符添加到文件?
在Windows批处理脚本中的SET / A命令中使用&符号
我怎样才能打开一个特定的程序,哪些目录有特殊字符的文件?
你的猜测是正确的。 当URL到达mod_rewrite进行处理时,Apache已经为您解码了URL。 因此,如果你想检查任何其他编码的字符,你需要使用他们的文字表示。
由于在这里使用空格作为分隔符,所以您还需要转义空格:
RewriteRule ^Characters & Supers.html$ papers.PHP?f=%0&of=0&s=Newest
我相信使用引号也是可以的,所以下面的内容应该是等价的(虽然没有经过测试):
RewriteRule "^Characters & Supers.html$" papers.PHP?f=%0&of=0&s=Newest
关于Apache解码过程的最后一点是它会自动为你删除多个斜杠。 虽然与您的示例不相关,但它是在达到您的mod_rewrite规则之前如何转换URL的另一个示例。
今天关于mod_rewrite:将path和查询stringURL作为parameter passing 和获取path中"a.java"子字符串 的讲解已经结束,谢谢您的阅读,如果想了解更多关于Apache mod_rewrite RewriteRule禁止字、Apache No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed、Apache 相关 mod_rewrite ,RewriteCond,{HTTP_HOST}、Apache:mod_rewrite:Spcaes&特殊字符在URL不起作用 的相关知识,请在本站搜索。