我的 htaccess 代码用于重写 URL 如下
RewriteEngine On
RewriteBase "/myekc/"
RewriteCond %{REQUEST_URI} ^/myekc/
RewriteCond %{REQUEST_FILENAME} !/(css|images|js)/
RewriteRule "/t/pepsi/(.*)$" "http://192.168.0.175:68/$1" [P]
RewriteRule "^(.*(?:xampp|htdocs)/)(.+)$" "http://192.168.0.179/myekc/t/pepsi/$2" [R,QSA,L]
这适用于 1 个 URI。我现在想写 if 条件,以这种方式写入多个 uri 例如:
<If "req('uri') == '/t/pepsi/'">
RewriteBase "/myekc/"
RewriteCond %{REQUEST_URI} ^/myekc/
RewriteCond %{REQUEST_FILENAME} !/(css|images|js)/
RewriteRule "/t/pepsi/(.*)$" "http://192.168.0.175:68/$1" [P]
RewriteRule "^(.*(?:xampp|htdocs)/)(.+)$" "http://192.168.0.179/myekc/t/pepsi/$2" [R,QSA,L]
</if>
<If "req('uri') == '/t/coke/'">
RewriteBase "/myekc/"
RewriteCond %{REQUEST_URI} ^/myekc/
RewriteCond %{REQUEST_FILENAME} !/(css|images|js)/
RewriteRule "/t/coke/(.*)$" "http://192.168.0.175:68/$1" [P]
RewriteRule "^(.*(?:xampp|htdocs)/)(.+)$" "http://192.168.0.179/myekc/t/coke/$2" [R,QSA,L]
</if>
这里不需要明确的<If>
条件。使用 mod_rewrite,如果需要将指令应用于其他 URL,只需通过指定适当的RewriteRule
模式来包含不同 URL 的该指令即可。例如:
RewriteEngine On
RewriteRule ^(.*(?:xampp|htdocs)/)(.+)$ http://192.168.0.179/myekc/t/pepsi/$2 [R,L]
RewriteCond %{REQUEST_URI} ^/myekc/
RewriteCond %{REQUEST_FILENAME} !/(css|images|js)/
RewriteRule /t/pepsi/(.*)$ http://192.168.0.175:68/$1 [P]
RewriteCond %{REQUEST_URI} ^/myekc/
RewriteCond %{REQUEST_FILENAME} !/(css|images|js)/
RewriteRule /t/coke/(.*)$ http://192.168.0.175:68/$1 [P]
请注意,RewriteBase
指令只能在.htaccess
文件中使用一次(最后一个实例获胜并控制整个文件(。但是您在发布的指令中根本没有使用,因此我暂时将其完全删除。
但是,目前,这两个规则执行相同的操作,因此可以组合在一起:
RewriteCond %{REQUEST_URI} ^/myekc/
RewriteCond %{REQUEST_FILENAME} !/(css|images|js)/
RewriteRule /t/(?:pepsi|coke)/(.*)$ http://192.168.0.175:68/$1 [P]
我需要 if 条件,因为我想为每个模式设置 cookie 值。因此,cookie 的值将是路径 "/t/pepsi/" 和 "/t/coke"。如果我一起使用,则考虑最后一个cookie值。示例:想要设置
Header set Set-Cookie "mycookie=/t/pepsi/" "expr=-z %{req:Cookie}"
和Header set Set-Cookie "mycookie=/t/coke/" "expr=-z %{req:Cookie}"
。
您仍然不需要显式<If>
条件,因为mod_rewrite允许您设置 cookie,在这种情况下可能更容易使用(因为您已经在使用 mod_rewrite 来捕获路径(。例如:
RewriteRule (/t/(?:pepsi|coke)/)(.*)$ http://192.168.0.175:68/$1 [CO=test:$1:.example.com,P]
RewriteRule
指令上的CO
(cookie
( 标志将 cookietest
(在域.example.com
上(设置为请求中 URL 路径的值(即。"/t/百事可乐/"或"/t/coke/"(。
参考资料:
https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_co