我想让apache重写表单中的所有链接:
host.com/links/<a>/<b>/<c>
如:
host.com/links/1/2/3
表格:
host.com/links/?a=1&b=2&c=3
我理解我需要将.htaccess与重写规则添加到links
文件夹,但是并不真正理解重写规则的语法。
任何人都可以帮忙吗?
答案 0 :(得分:2)
根据此link
浏览器中的网址为:
private Player player;
public void executeEvents() {
List<IEvent> events = ...;
ProcessEventVisitor visitor = new ProcessEventVisitor();
for (IEvent event : events) {
event.accept(visitor);
}
}
服务器呈现的实际页面为:
host.com/links/1/2/3
添加到host.com/links/?a=1&b=2&c=3
这一行:
.htaccess
如果要重写更复杂的网址,则需要创建更多网址 复杂的正则表达式几乎任何模式都可以表达出来 作为一个正则表达式,如果你把它分解成小块。这个 正则表达式只分解为几个组成部分,一次 你过去盯着看似随意的角色:
RewriteEngine On
RewriteRule ^/links/([^/]+)/([^/]+)/([^/]+) /?a=$1&b=$2&c=$3 [PT]
上面的组件是一个包含&#34;而不是斜杠&#34;的字符类。 所以,如果我们这样做......
[^/]
表示&#34;零或多个非斜线字符&#34;。换句话说,我们是 寻找斜线之间的一切。有两套 这些,因为我们在斜线之间寻找两块东西。 有了这个小小的信息,请去看看常规 再次表达,看看它是否更有意义。和。一样 之前,我使用[PT]标志来指示目标URL不是 只是一个要服务的文件,但是需要的东西 处理。在这种情况下,它将成为一个cgi脚本处理程序。所以 Apache将生成的URL传递给该处理程序。
答案 1 :(得分:0)
重写规则的basci语法如下所示。
通过httpd.conf
启用mod_rewrite和.htaccess,然后将此代码放在.htaccess
目录下的DOCUMENT_ROOT
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(demo)\.(.+)$ [NC]
RewriteRule ^(setup)/?$ http://www.%2/%1/$1 [L,R=301,NC]
RewriteCond %{HTTP_HOST} ^(demo)\.(.+)$ [NC]
RewriteRule ^(xyz)/?$ http://www.%2/%1/web/$1 [L,R=301,NC]
RewriteCond %{HTTP_HOST} !^demo\. [NC]
RewriteRule ^(xyz)/?$ /web/$1 [L,R=301,NC]
有关重写标志的更多信息
https://httpd.apache.org/docs/2.4/rewrite/flags.html https://httpd.apache.org/docs/2.4/rewrite/intro.html