Ich habe ungefähr 25000 URLs von meiner alten Site, die ein ABC in der URL haben.
Ich möchte 3 DBM-Dateien in meinem Apache Conf verwenden.
Das Ziel ist, wenn die URL nicht abc dh enthält. http://example.com/1234.htm
dann möchte ich nicht, dass die abcredirects.DBM-datei angeschaut wird.
Wenn die URL abc enthält, d. http://example.com/abc1234.htm
dann möchte ich nur die abcredirectsDBM datei anschauen.
Ich versuche jedoch eine if - Anweisung in meinem Apache jederzeit zu verwenden , verwende ich den <If>
Block , was ich scheint hineingelegt ignoriert zu werden.
Ich habe die <If "%{REQUEST_URI} =~ m#^abc#">
Linie auf viele verschiedene Arten geändert, aber es spielt keine Rolle. Wenn ich den <if>
Block entferne, funktionieren alle Weiterleitungen wie erwartet.
Warum wird mein <if>
Block ignoriert? Es gibt keinen Fehler und gemäß den Protokollen http://example.com/abc1234.htm
(nehme ich an) wird nicht als wahr ausgewertet, so dass ich nicht sicher bin, was ich sonst überprüfen soll.
[root@mail conf]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Jun 27 2018 13:48:59
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteMap abcredirects "dbm:/etc/httpd/conf/dbm/abcredirects.dbm"
<If "%{REQUEST_URI} =~ m#^abc#">
RewriteCond ${abcredirects:$1} !=""
RewriteRule ^(.*) /${abcredirects:$1} [R=301,L]
</If>
RewriteMap shortalias "dbm:/etc/httpd/conf/shortalias.dbm"
RewriteCond ${shortalias:$1} !=""
RewriteRule ^(.*) /${shortalias:$1} [R=301,L]
</IfModule>
<VirtualHost *:80>
DocumentRoot /var/www/sites/me
ServerName example.com
DirectoryIndex index.htm
Options +FollowSymLinks
RewriteEngine On
RewriteOptions Inherit
RewriteMap otherredirects "dbm:/etc/httpd/conf/otherredirects.dbm"
RewriteCond ${otherredirects:$1} !=""
RewriteRule ^(.*) /${otherredirects:$1} [R=301,L]
</VirtualHost>
Ich habe Fragen zu Serverfehlern gesehen und versucht:
Apache Force, wenn die URL über eine bestimmte Musterumleitung zu https verfügt
<If>
was ich benutze , ignoriert wird. Das Entfernen der <If>
Umschreibungen funktioniert jedoch aus den Protokollen. Ich kann sehen, dass auf beide DBM-Dateien zugegriffen wird.
IF
s wie folgt aus :<If ...cond1><IfModule mod_rewrite></IfModule></If> <If ...cond2><IfModule mod_rewrite></IfModule></If>