- 浏览: 153682 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zyq070:
version 自动增长的 你手动设值 相比之前的值已经变化 ...
Row was updated or deleted by another transaction (or unsaved-value mapping was -
中华神韵:
...
Java中从一个ArrayList删除重复的元素 -
Menuz:
logcat慢慢调,终会找到的。
The application has stopped unexpectedly -
右转随缘:
好抽象。。。
The application has stopped unexpectedly -
tsmg:
您好,我zend也配了,怎么就是不能正常调试呢?是不会用在EP ...
安装EPP的调试Zend Debugger
原文地址:
http://blog.ixpub.net/html/18/9727518-68873.html
规范化URL
描述:
在有些web服务器上,一个资源会拥有多个URL。在实际应用和发布中应该使用的是规范的URL,其他的则是简写或者只在内部使用。无论用户在请求中使用什么形式的URL,最终看见的都应该是规范的URL。
解决方案:
对所有不规范的URL执行一个外部HTTP重定向,以改变它在浏览器地址栏中的显示及其后继请求。下例中的规则集用规范的/u/user替换/~user,并修正了/u/user所遗漏的后缀斜杠。
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]
规范化主机名
描述:
这个规则的目的是强制使用特定的主机名以代替其他名字。比如,你想强制使用www.example.com代替example.com,就可以在以下方案的基础上进行修改:
解决方案:
对运行在非80端口的站点
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
对运行在80端口的站点
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*)http://fully.qualified.domain.name/$1 [L,R]
移动过的DocumentRoot
描述:
通常,web服务器的DocumentRoot直接对应于URL"/",但是它常常不是处于最高的一级。比如,你希望访问者在进入网站时首先进入/about/目录。可以使用下面给出的规则集。
解决方案:
只需将"/"重定向到"/about/"即可:
RewriteEngine on
RewriteRule ^/$ /about/ [R]
也可以使用RedirectMatch指令解决问题:
RedirectMatch ^/$http://example.com/e/www/
结尾斜杠问题
描述:
每个网管对引用目录的结尾斜杠问题都有一本苦经,如果遗漏了,服务器会产生一个错误,因为如果请求是"/~quux/foo"而不是"/~quux/foo/",服务器就会去找一个叫foo的文件,而它是一个目录,所以就报错了。通常,可以使用这个FAQ entry里面提到的方法解决问题。但是有时候需要使用重写规则来解决问题,比如,在应用了许多复杂的重写规则之后。
解决方案:
解决这个微妙问题的方案是让服务器自动添加后缀斜杠。为了达到目的,必须使用一个外部重定向,以使浏览器能够正确地处理后继的请求(比如对图片的请求)。如果仅仅执行一个内部重写,可能仅仅对目录页面有效,而对含有相对URL的图片的页面无效,因为浏览器有请求内嵌目标的可能。比如,如果不用外部重定向,对/~quux/foo/index.html页面中的image.gif的请求将变成对/~quux/image.gif的请求!所以,应该这样写:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
又懒又疯狂的做法是把这些写入其宿主目录中的顶级.htaccess中:
RewriteEngine on
RewriteBase /~quux/
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R]
但是这样一来会增加处理上的开销。
将用户主目录移动到不同web服务器
描述:
通常,许多网管在建立一个新的web服务器时,都会有这样的要求:重定向一个web服务器上的所有用户主目录到另一个web服务器。
解决方案:
很简单,在老的web服务器上重定向所有的"/~user/anypath"到"http://newserver/~user/anypath":
RewriteEngine on
RewriteRule ^/~(.+) http://newserver/~$1 [R,L]
在多个目录中搜索页面
描述:
有时会有必要使web服务器在多个目录中搜索页面,对此,MultiViews或者其他技术无能为力。
解决方案:
编制一个明确的规则集以搜索目录中的文件:
RewriteEngine on
# 首先尝试在 dir1 中寻找,找到即停
RewriteCond /your/docroot/dir1/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /your/docroot/dir1/$1 [L]
# 然后尝试在 dir2 中寻找,找到即停
RewriteCond /your/docroot/dir2/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /your/docroot/dir2/$1 [L]
# 再找不到就继续寻找其他的 Alias 或 ScriptAlias 目录
RewriteRule ^(.+) - [PT]
按照URL的片段设置环境变量
描述:
希望保持请求之间的状态信息,又不希望使用CGI来包装所有页面,只是通过分离URL中的有用信息来做到。
解决方案:
可以用一个规则集来分离出状态信息,并设置环境变量以备此后用于XSSI或CGI。这样,一个"/foo/S=java/bar/"的URL会被解析为"/foo/bar/",而环境变量STATUS则被设置为"java"。
RewriteEngine on
RewriteRule ^(.*)/S=([^/]+)/(.*) $1/$3 [E=STATUS:$2]
虚拟用户主机
描述:
如果需要为用户username支持一个www.username.host.domain.com的主页,但不在此机器上建虚拟主机,而是仅用在此机器上增加一个DNS A记录的方法实现。
解决方案:
仅能对包含"Host: "头的HTTP/1.1请求实现。可以使用以下规则集内部地将http://www.username.host.com/anypath重写为/home/username/anypath
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2
为外来访问者重定向用户主目录
描述:
对不是来自本地域ourdomain.com的外来访问者的请求,重定向其用户主目录URL到另一个web服务器www.somewhere.com,有时这种做法也会用在虚拟主机的配置段中。
解决方案:
只须一个重写条件:
RewriteEngine on
RewriteCond %{REMOTE_HOST} !^.+\.ourdomain\.com$
RewriteRule ^(/~.+)http://www.somewhere.com/$1 [R,L]
重定向锚
描述:
默认情况下,重定向到一个HTML锚是不可行的,因为'#'会被转义为'%23'。This, in turn, breaks the redirection.
解决方案:
在RewriteRule指令中使用[NE]标志(不转义)。
依赖于时间的重写
描述:
在页面内容需要按时间的不同而变化的场合,比如重定向特定页面等,许多网管仍然采用CGI脚本的方法,如何用mod_rewrite来实现呢?
解决方案:
有许多名为TIME_xxx的变量可以用在重写条件中,联合使用词典模式的"<STRING", "=STRING", ">STRING"比较,就可以实现依赖于时间的重写:
RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^foo\.html$ foo.day.html
RewriteRule ^foo\.html$ foo.night.html
此例使foo.html在07:00-19:00时间内指向foo.day.html,而在其余时间指向foo.night.html,对主页是一个不错的功能...
对YYYY转变为XXXX的向前兼容
描述:
在转变了大批document.YYYY文件为document.XXXX后(比如.html→.phtml),如何保持URL的向前兼容(仍然虚拟地存在)?
解决方案:
只须按基准文件名重写,并测试带有新的扩展名的文件是否存在,如果存在则用新的,否则仍然用原来的。
# 将document.html重写为document.phtml的向后兼容的规则集
# 当且仅当document.phtml存在且document.html不存在的时候
RewriteEngine on
RewriteBase /~quux/
# 剪切并记住basename
RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
# 如果存在的话就重写为document.phtml
RewriteCond %{REQUEST_FILENAME}.phtml -f
RewriteRule ^(.*)$ $1.phtml [S=1]
# 否则返回先前的basename
RewriteCond %{ENV:WasHTML} ^yes$
RewriteRule ^(.*)$ $1.html
内容处理
从旧到新(内部)
描述:
假定已经把文件foo.html改名为bar.html,需要对老的URL向后兼容,即让用户仍然可以使用老的URL,而感觉不到文件被改名了。
解决方案:
通过以下规则内部地将老的URL重写为新的:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ bar.html
从旧到新(外部)
描述:
仍然假定已经把文件foo.html改名为bar.html,需要对老的URL向后兼容,但是要让用户得到文件被改名的暗示,即浏览器的地址栏中显示的是新的URL。
解决方案:
作一个HTTP的强制重定向以改变浏览器和用户界面上的显示:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ bar.html [R]
从静态到动态
描述:
如何无缝转换静态页面foo.html为动态的foo.cgi,而不为浏览器/用户所察觉。
解决方案:
只须重写此URL为CGI-script,并强制作为CGI-script运行的MIME类型。比如对/~quux/foo.html的请求会执行/~quux/foo.cgi 。
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ foo.cgi [T=application/x-httpd-cgi]
访问控制
阻止Robot
描述:
如何阻止一个完全匿名的Robot取得特定网络区域的页面?/robots.txt文件可以包含若干"Robot排除协议"行,但不足以阻止此类Robot。
解决方案:
可以用一个规则集以拒绝对网络区域/~quux/foo/arc/(对一个很深的目录区域进行列表可能会使服务器产生很大的负载)的访问。还必须确保仅阻止特定的Robot,也就是说,仅仅阻止Robot访问主机是不够的(这样会同时阻止用户访问该主机)。为此,就需要对HTTP头的User-Agent信息作匹配。
RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot.*
RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.[8-9]$
RewriteRule ^/~quux/foo/arc/.+ - [F]
阻止内嵌的图片
描述:
假设http://www.quux-corp.de/~quux/有一些内嵌GIF图片的页面,这些图片很好,所以就有人盗链到他们自己的页面中了。由于这样徒然增加了我们服务器的流量,因此,我们不愿意这种事情发生。
解决方案:
虽然,我们不能100%地保护这些图片不被写入别人的页面,但至少可以对发出HTTP Referer头的浏览器加以限制。
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule .*\.gif$ - [F]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
RewriteRule ^inlined-in-foo\.gif$ - [F]
拒绝代理
描述:
如何拒绝某个主机或者来自特定主机的用户使用Apache代理?
解决方案:
首先,要确保在配置文件中mod_rewrite位于mod_proxy之后!使它在mod_proxy之前被调用。然后,使用如下方法拒绝某个主机:
RewriteCond %{REMOTE_HOST} ^badhost\.mydomain\.com$
RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
使用如下方法拒绝user@host-dependent用户:
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} ^badguy@badhost\.mydomain\.com$
RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
其它
外部重写引擎
描述:
如何解决似乎无法用mod_rewrite解决的FOO/BAR/QUUX/之类的问题?
解决方案:
可以使用一个与RewriteMap功能相同的外部RewriteMap程序,一旦它在Apache启动时被执行,则从STDIN接收被请求的URL ,并将处理过(通常是重写过的)的URL(以相同顺序)在STDOUT输出。
RewriteEngine on
RewriteMap quux-map prg:/path/to/map.quux.pl
RewriteRule ^/~quux/(.*)$ /~quux/${quux-map:$1}
#!/path/to/perl
# 禁止使用会导致Apache陷入死循环的I/O缓冲
$| = 1;
# 从stdin读取URL(每行一个),并在stdout输出替换URL
while (<>) {
s|^foo/|bar/|;
print $_;
}
这是只是一个简单的示例,只是把所有的/~quux/foo/...重写为/~quux/bar/...而已。但事实上,可以把它修改成任何你想要的输出。但是要注意,虽然一般用户都可以使用,可是只有系统管理员才可以定义这样的映射。
http://blog.ixpub.net/html/18/9727518-68873.html
规范化URL
描述:
在有些web服务器上,一个资源会拥有多个URL。在实际应用和发布中应该使用的是规范的URL,其他的则是简写或者只在内部使用。无论用户在请求中使用什么形式的URL,最终看见的都应该是规范的URL。
解决方案:
对所有不规范的URL执行一个外部HTTP重定向,以改变它在浏览器地址栏中的显示及其后继请求。下例中的规则集用规范的/u/user替换/~user,并修正了/u/user所遗漏的后缀斜杠。
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]
规范化主机名
描述:
这个规则的目的是强制使用特定的主机名以代替其他名字。比如,你想强制使用www.example.com代替example.com,就可以在以下方案的基础上进行修改:
解决方案:
对运行在非80端口的站点
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
对运行在80端口的站点
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*)http://fully.qualified.domain.name/$1 [L,R]
移动过的DocumentRoot
描述:
通常,web服务器的DocumentRoot直接对应于URL"/",但是它常常不是处于最高的一级。比如,你希望访问者在进入网站时首先进入/about/目录。可以使用下面给出的规则集。
解决方案:
只需将"/"重定向到"/about/"即可:
RewriteEngine on
RewriteRule ^/$ /about/ [R]
也可以使用RedirectMatch指令解决问题:
RedirectMatch ^/$http://example.com/e/www/
结尾斜杠问题
描述:
每个网管对引用目录的结尾斜杠问题都有一本苦经,如果遗漏了,服务器会产生一个错误,因为如果请求是"/~quux/foo"而不是"/~quux/foo/",服务器就会去找一个叫foo的文件,而它是一个目录,所以就报错了。通常,可以使用这个FAQ entry里面提到的方法解决问题。但是有时候需要使用重写规则来解决问题,比如,在应用了许多复杂的重写规则之后。
解决方案:
解决这个微妙问题的方案是让服务器自动添加后缀斜杠。为了达到目的,必须使用一个外部重定向,以使浏览器能够正确地处理后继的请求(比如对图片的请求)。如果仅仅执行一个内部重写,可能仅仅对目录页面有效,而对含有相对URL的图片的页面无效,因为浏览器有请求内嵌目标的可能。比如,如果不用外部重定向,对/~quux/foo/index.html页面中的image.gif的请求将变成对/~quux/image.gif的请求!所以,应该这样写:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
又懒又疯狂的做法是把这些写入其宿主目录中的顶级.htaccess中:
RewriteEngine on
RewriteBase /~quux/
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R]
但是这样一来会增加处理上的开销。
将用户主目录移动到不同web服务器
描述:
通常,许多网管在建立一个新的web服务器时,都会有这样的要求:重定向一个web服务器上的所有用户主目录到另一个web服务器。
解决方案:
很简单,在老的web服务器上重定向所有的"/~user/anypath"到"http://newserver/~user/anypath":
RewriteEngine on
RewriteRule ^/~(.+) http://newserver/~$1 [R,L]
在多个目录中搜索页面
描述:
有时会有必要使web服务器在多个目录中搜索页面,对此,MultiViews或者其他技术无能为力。
解决方案:
编制一个明确的规则集以搜索目录中的文件:
RewriteEngine on
# 首先尝试在 dir1 中寻找,找到即停
RewriteCond /your/docroot/dir1/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /your/docroot/dir1/$1 [L]
# 然后尝试在 dir2 中寻找,找到即停
RewriteCond /your/docroot/dir2/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /your/docroot/dir2/$1 [L]
# 再找不到就继续寻找其他的 Alias 或 ScriptAlias 目录
RewriteRule ^(.+) - [PT]
按照URL的片段设置环境变量
描述:
希望保持请求之间的状态信息,又不希望使用CGI来包装所有页面,只是通过分离URL中的有用信息来做到。
解决方案:
可以用一个规则集来分离出状态信息,并设置环境变量以备此后用于XSSI或CGI。这样,一个"/foo/S=java/bar/"的URL会被解析为"/foo/bar/",而环境变量STATUS则被设置为"java"。
RewriteEngine on
RewriteRule ^(.*)/S=([^/]+)/(.*) $1/$3 [E=STATUS:$2]
虚拟用户主机
描述:
如果需要为用户username支持一个www.username.host.domain.com的主页,但不在此机器上建虚拟主机,而是仅用在此机器上增加一个DNS A记录的方法实现。
解决方案:
仅能对包含"Host: "头的HTTP/1.1请求实现。可以使用以下规则集内部地将http://www.username.host.com/anypath重写为/home/username/anypath
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2
为外来访问者重定向用户主目录
描述:
对不是来自本地域ourdomain.com的外来访问者的请求,重定向其用户主目录URL到另一个web服务器www.somewhere.com,有时这种做法也会用在虚拟主机的配置段中。
解决方案:
只须一个重写条件:
RewriteEngine on
RewriteCond %{REMOTE_HOST} !^.+\.ourdomain\.com$
RewriteRule ^(/~.+)http://www.somewhere.com/$1 [R,L]
重定向锚
描述:
默认情况下,重定向到一个HTML锚是不可行的,因为'#'会被转义为'%23'。This, in turn, breaks the redirection.
解决方案:
在RewriteRule指令中使用[NE]标志(不转义)。
依赖于时间的重写
描述:
在页面内容需要按时间的不同而变化的场合,比如重定向特定页面等,许多网管仍然采用CGI脚本的方法,如何用mod_rewrite来实现呢?
解决方案:
有许多名为TIME_xxx的变量可以用在重写条件中,联合使用词典模式的"<STRING", "=STRING", ">STRING"比较,就可以实现依赖于时间的重写:
RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^foo\.html$ foo.day.html
RewriteRule ^foo\.html$ foo.night.html
此例使foo.html在07:00-19:00时间内指向foo.day.html,而在其余时间指向foo.night.html,对主页是一个不错的功能...
对YYYY转变为XXXX的向前兼容
描述:
在转变了大批document.YYYY文件为document.XXXX后(比如.html→.phtml),如何保持URL的向前兼容(仍然虚拟地存在)?
解决方案:
只须按基准文件名重写,并测试带有新的扩展名的文件是否存在,如果存在则用新的,否则仍然用原来的。
# 将document.html重写为document.phtml的向后兼容的规则集
# 当且仅当document.phtml存在且document.html不存在的时候
RewriteEngine on
RewriteBase /~quux/
# 剪切并记住basename
RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
# 如果存在的话就重写为document.phtml
RewriteCond %{REQUEST_FILENAME}.phtml -f
RewriteRule ^(.*)$ $1.phtml [S=1]
# 否则返回先前的basename
RewriteCond %{ENV:WasHTML} ^yes$
RewriteRule ^(.*)$ $1.html
内容处理
从旧到新(内部)
描述:
假定已经把文件foo.html改名为bar.html,需要对老的URL向后兼容,即让用户仍然可以使用老的URL,而感觉不到文件被改名了。
解决方案:
通过以下规则内部地将老的URL重写为新的:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ bar.html
从旧到新(外部)
描述:
仍然假定已经把文件foo.html改名为bar.html,需要对老的URL向后兼容,但是要让用户得到文件被改名的暗示,即浏览器的地址栏中显示的是新的URL。
解决方案:
作一个HTTP的强制重定向以改变浏览器和用户界面上的显示:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ bar.html [R]
从静态到动态
描述:
如何无缝转换静态页面foo.html为动态的foo.cgi,而不为浏览器/用户所察觉。
解决方案:
只须重写此URL为CGI-script,并强制作为CGI-script运行的MIME类型。比如对/~quux/foo.html的请求会执行/~quux/foo.cgi 。
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ foo.cgi [T=application/x-httpd-cgi]
访问控制
阻止Robot
描述:
如何阻止一个完全匿名的Robot取得特定网络区域的页面?/robots.txt文件可以包含若干"Robot排除协议"行,但不足以阻止此类Robot。
解决方案:
可以用一个规则集以拒绝对网络区域/~quux/foo/arc/(对一个很深的目录区域进行列表可能会使服务器产生很大的负载)的访问。还必须确保仅阻止特定的Robot,也就是说,仅仅阻止Robot访问主机是不够的(这样会同时阻止用户访问该主机)。为此,就需要对HTTP头的User-Agent信息作匹配。
RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot.*
RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.[8-9]$
RewriteRule ^/~quux/foo/arc/.+ - [F]
阻止内嵌的图片
描述:
假设http://www.quux-corp.de/~quux/有一些内嵌GIF图片的页面,这些图片很好,所以就有人盗链到他们自己的页面中了。由于这样徒然增加了我们服务器的流量,因此,我们不愿意这种事情发生。
解决方案:
虽然,我们不能100%地保护这些图片不被写入别人的页面,但至少可以对发出HTTP Referer头的浏览器加以限制。
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule .*\.gif$ - [F]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
RewriteRule ^inlined-in-foo\.gif$ - [F]
拒绝代理
描述:
如何拒绝某个主机或者来自特定主机的用户使用Apache代理?
解决方案:
首先,要确保在配置文件中mod_rewrite位于mod_proxy之后!使它在mod_proxy之前被调用。然后,使用如下方法拒绝某个主机:
RewriteCond %{REMOTE_HOST} ^badhost\.mydomain\.com$
RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
使用如下方法拒绝user@host-dependent用户:
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} ^badguy@badhost\.mydomain\.com$
RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
其它
外部重写引擎
描述:
如何解决似乎无法用mod_rewrite解决的FOO/BAR/QUUX/之类的问题?
解决方案:
可以使用一个与RewriteMap功能相同的外部RewriteMap程序,一旦它在Apache启动时被执行,则从STDIN接收被请求的URL ,并将处理过(通常是重写过的)的URL(以相同顺序)在STDOUT输出。
RewriteEngine on
RewriteMap quux-map prg:/path/to/map.quux.pl
RewriteRule ^/~quux/(.*)$ /~quux/${quux-map:$1}
#!/path/to/perl
# 禁止使用会导致Apache陷入死循环的I/O缓冲
$| = 1;
# 从stdin读取URL(每行一个),并在stdout输出替换URL
while (<>) {
s|^foo/|bar/|;
print $_;
}
这是只是一个简单的示例,只是把所有的/~quux/foo/...重写为/~quux/bar/...而已。但事实上,可以把它修改成任何你想要的输出。但是要注意,虽然一般用户都可以使用,可是只有系统管理员才可以定义这样的映射。
发表评论
-
9个强大免费的PHP库
2010-12-12 23:16 926Forward from : http://net.t ... -
PHP 常用类库
2010-12-12 22:50 1134Forward from:http://komunita ... -
CURL 模拟登陆并获取数据
2010-12-12 14:11 24221、CURL模拟登陆的流程和步骤 分析登陆字,登录后保留C ... -
CURL 传输与获取功能
2010-12-12 13:47 1490一、什么是CURL且能实现什么功能? 什么是CURL curl ... -
smarty 缓存控制
2010-12-12 00:39 1037Smarty缓存功能几乎是Smarty模板中占了40%的部分。 ... -
Smarty配置使用
2010-12-11 23:08 1026转自:http://www.hoo80.com/b ... -
安装EPP的调试Zend Debugger
2010-12-11 16:31 2738参考引自http://www.cnblogs.com/yjf5 ... -
php.ini 中开启短标签
2010-12-11 14:20 2686控制参数: short_open_tag = On 如果设置 ... -
Apache虚拟主机和虚拟目录的设置
2010-12-11 13:45 932转自:http://weblife.blogbus.com/l ... -
[转]搜集到Joomla!资源
2010-10-10 13:07 1090Reference from: http://www.joom ... -
[Drupal学习二]第一个模块编写
2010-03-21 17:43 9601. 在Drupal_Installation\sites\a ... -
[Drupal学习一]Drupal安装和基本配置
2010-03-21 17:29 20861. 从官方网站上下载drupal-6.16 http:// ... -
Apache Rewrite 规则详解
2009-11-06 12:52 854转自:http://blog.atimg.com/articl ... -
PHP的cURL库功能简介:抓取网页,POST数据及其他
2009-10-13 14:30 1620使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一 ... -
php curl用法
2009-10-12 17:20 3549原文地址: http://www.hebaodans.com/ ... -
关于.htaccess的配置
2009-10-11 11:24 3115原文地址:http://blog.csdn.net/zenwo ... -
PHP中调用Java类的两种方法
2009-10-10 19:33 1097PHP中调用Java类的两种方法 Java语言功能强大,因此在 ... -
php时间戳与日期互转
2009-10-10 15:46 3763PHP时间大的来分有两种,一是时间戳类型(1228348800 ... -
学习php记录
2009-09-17 15:38 815PHP die() 函数 定义和用法 die() 函数输出一条 ... -
php环境配置
2009-09-15 10:49 12141 在配置安装apache_2.2.13+php-5.2 ...
相关推荐
通过mod_rewrite模块,Apache2.2能实现URL的重写和转换,这对于创建友好的SEO网址或者隐藏实际路径非常有用。RewriteRule和RewriteCond是两个核心指令,它们共同决定了何时以及如何重写URL。 五、身份验证与授权 ...
通过`mod_rewrite`模块,Apache可以进行URL重写,实现URL美化、隐藏真实路径或实现动态URL静态化。`.htaccess`文件中的RewriteRule和RewriteCond可以定义重写规则。 六、日志与错误处理 Apache的日志记录可以通过`...
**Apache2.2中文手册** 是一份详细的指南,旨在帮助用户理解和操作Apache HTTP Server 2.2版本。Apache是世界上最流行的Web服务器软件,它免费、开源,并且支持多种操作系统,包括Linux、Windows和Unix等。这份手册...
本手册详细涵盖了Apache 2.2的配置、管理和优化,为用户提供了一个全面了解和操作该服务器的指南。 一、Apache 2.2基础 Apache 2.2的核心功能包括静态文件服务、动态内容生成(如PHP、Java、Perl等)、URL重写、...
Apache 2.2可以通过RewriteCond和RewriteRule结合使用,实现防盗链功能,防止外部网站盗用你的资源。此外,使用Allow、Deny和Order指令,可以精细控制对特定IP或用户组的访问权限。 十、模块扩展性 Apache 2.2的...
3. **服务器模块**:如Apache的mod_rewrite,IIS的URL Rewrite模块,提供强大的URL重写和路由功能。 四、URL重写规则 URL重写规则通常包含两部分:匹配模式和替换目标。匹配模式定义了哪些URL需要被重写,而替换...
本主题聚焦于CI(CodeIgniter)框架在与Nginx、IIS(Internet Information Services)和Apache这三种不同的Web服务器配合时的URL重写实践。下面我们将深入探讨这些服务器的URL重写机制以及如何在CI框架中实现。 ...
在Linux环境下,Apache服务器的URL重写功能是一个强大的工具,它允许您将复杂的URL转换为更简洁、用户友好的格式,提高网站的可访问性和SEO优化。Apache的URL重写功能是通过`mod_rewrite`模块实现的。以下是开启...
Apache的URL重写规则是Apache HTTP服务器中一个强大的功能,它允许管理员或开发者通过修改URL结构来实现多种目的,如美化URL、隐藏真实路径、实现动态URL到静态URL的转换等。以下是对Apache URL重写规则中一些常用...
2. 配置httpd.conf:在Apache的配置文件中,通过LoadModule指令加载mod_jk模块,然后设置 JKMount指令,指定哪些URL路径应该被发送到Tomcat。例如: ``` LoadModule jk_module modules/mod_jk.so JkWorkersFile ...
URL重写是Web开发中的一种技术,主要用于优化和简化网站的访问URL,使其更符合用户的记忆习惯和搜索引擎的友好性。在本主题中,我们将深入探讨URL重写的概念、原理以及在实际应用中的常见方法。 一、URL重写概念 ...
### URL重写概念和例子 #### 一、URL重写定义与作用 **URL重写**(Uniform Resource Locator Rewriting),是指在服务器端对原始的URL请求进行转换,使其变为另一种形式,以便更好地满足网站设计的需求。这种转换既...
标题 "URL 重写类 url class" 涉及的核心技术是 URL 重写,这是一种优化网站 URL 结构,使其更美观、更易读的方法。在网页开发中,URL 重写通常用于实现 SEO(搜索引擎优化)友好和用户友好的网址。通过 URL 重写,...
Apache URL 重写功能是通过其内置的模块`mod_rewrite`来实现的,该功能允许开发者隐藏实际的URL路径,创建更加用户友好的网址,同时还能进行动态请求的路由和处理。以下是开启Apache URL重写功能的详细步骤: 1. **...
URL重写的核心原理是通过服务器端的规则引擎(如Apache的mod_rewrite模块或IIS的URL Rewrite Module)将用户访问的友好的、易于理解的URL转换为服务器能够识别的实际处理请求的复杂URL。这样做有以下几个主要好处: ...
URL重写是通过服务器端的配置,如Apache的`.htaccess`文件或IIS的URL重写模块,来实现URL的转换。当客户端请求一个伪静态URL时,服务器会根据预先定义的规则将其解析为实际的动态URL,执行相应的程序并返回结果。...
- **Apache mod_rewrite**:Apache服务器最常用的URL重写工具,通过`.htaccess`文件配置规则。 - **IIS URL Rewrite**:微软IIS服务器的URL重写模块,同样支持在web.config文件中定义规则。 - **Nginx rewrite**:...
URL重写是Web开发中一个重要的技术,它允许开发者通过改变URL的结构,来实现对网页请求的处理,同时隐藏真实服务器路径,从而提高网站的安全性和用户体验。在本篇文章中,我们将深入探讨URL重写的基本原理、作用以及...
Url重写技术,通常以Apache的mod_rewrite模块和IIS的UrlRewrite模块为代表,是Web服务器中的一个重要功能,用于优化网站的URL结构,提高用户体验并有助于搜索引擎优化(SEO)。在本示例源码中,我们将深入理解Url...