正则表达式在 apache RewriteRule 中为 URI 添加前缀并执行 find/replace
Regex to prefix URI in apache RewriteRule and execute a find/replace
我正在尝试为 apache vhost conf 中的所有 URI 添加前缀 "redirect-lang",并将“/”更改为“%”。例如:
http://example.com/category/article/how/to/redirect
将成为:
http://example.com/redirect-lang/category%article%how%to%redirect
为此,我写了以下内容:
RewriteRule (.*)([^\/]+)\/([^\/]+)\/?$ http://%{HTTP_HOST}-
RewriteCond %{REQUEST_URI} ^(?!(.*)(\/?redirect)) [NC]
RewriteRule (.*)$ http://%{HTTP_HOST}/redirect/[=13=] [L]
第一个 RewriteRule
单独使用“%”替换“/”时效果很好,但是当添加 RewriteCond
和第二个 RewriteRule
时,它会进入无限循环.
有人可以帮我解决这个问题吗?
要重写每个带有前缀 /redirect-lang/
的 URL,请使用此规则作为 第一个规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!redirect-lang/).*)$ redirect-lang/ [L,NC]
我正在尝试为 apache vhost conf 中的所有 URI 添加前缀 "redirect-lang",并将“/”更改为“%”。例如:
http://example.com/category/article/how/to/redirect
将成为:
http://example.com/redirect-lang/category%article%how%to%redirect
为此,我写了以下内容:
RewriteRule (.*)([^\/]+)\/([^\/]+)\/?$ http://%{HTTP_HOST}-
RewriteCond %{REQUEST_URI} ^(?!(.*)(\/?redirect)) [NC]
RewriteRule (.*)$ http://%{HTTP_HOST}/redirect/[=13=] [L]
第一个 RewriteRule
单独使用“%”替换“/”时效果很好,但是当添加 RewriteCond
和第二个 RewriteRule
时,它会进入无限循环.
有人可以帮我解决这个问题吗?
要重写每个带有前缀 /redirect-lang/
的 URL,请使用此规则作为 第一个规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!redirect-lang/).*)$ redirect-lang/ [L,NC]