2013-07-01 21 views
6

hier ist mein Code für .htaccess-DateiMultiple .htaccess Rewrite-Regel

Options -Indexes 
RewriteEngine On 
RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^([a-z0-9]+)$ /profile.php?username=$1 [L] 
RewriteRule ^([a-z0-9]+)$ /display.php?page=$1 [L] 

Zum ersten man es richtig funktioniert und wird wie folgt dargestellt: www.site.com/user

Die zweite nicht funktioniert, normalerweise ist Anzeige so www.site.com/display.php?page=10. Ich möchte die Seite wie folgt anzeigen www.site.com/article Ich habe verschiedene Dinge ausprobiert und kein Ergebnis. Bitte sagen Sie mir, wie Sie mit mehreren Regeln arbeiten können. Bitte geben Sie mir auch einen Tipp, wie Sie diese Funktionen in PHP verwenden können, weil ich denke, dass ich etwas nicht wirklich gut gemacht habe. Mein PHP-Code dieser Regel für die Verwendung ist:

<p><a class="button" href="/<?php echo $user_data['username']; ?>"> Profile</a></p> 

Es funktioniert, aber vielleicht ist ein besserer Weg, um einen Link zu nutzen .htaccess zu machen.

Antwort

17

Die beiden Regeln, die Sie haben Konflikte, die verwendeten Muster sind genau das gleiche, was bedeutet, dass andere als die Bedingungen, die nur auf die erste Regel angewendet werden, sind die beiden Regeln völlig ununterscheidbar.

diese URL Gegeben:

http://www.site.com/blah 

Ist "blah" eine Seite oder ein Benutzer? Kann nicht sagen, weil das Regex-Muster (^([a-z0-9]+)$) für beide Regeln "blah" entspricht. Also, die erste wird immer egal was angewendet werden. Sie müssen etwas hinzufügen zwischen den 2, wie zB ein „Benutzer“ oder „Seite“ in der URL zu unterscheiden:

http://www.site.com/user/blah 
http://www.site.com/page/bleh 

Und Ihre Regeln würde wie folgt aussehen:

Options -Indexes 
RewriteEngine On 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [L] 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L] 
+1

Sie zu identifizieren danken. Jetzt ist es klarer. –

0

ich es gemacht Arbeits so was.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /domain/index.php/$1 [C] 

#second condition and rule 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /domain/subdir/index.php/$1 [L] 
2
Options -Indexes 
RewriteEngine On 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [N] 
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L] 

Verwendung [N] (nächste) weiterhin Regeln der gleichen Bedingung hinzugefügt und [L] (zuletzt) ​​die letzte Regel

+0

https://www.cheatography.com/davechild/cheat-sheets/mod-rewrite/ –