2013-07-01 17 views
6

tutaj jest mój kod do pliku .htaccessMultiple .htaccess przepisać reguła

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] 

Do pierwszej z nich działa poprawnie i jest wyświetlany tak: www.site.com/user

Drugi nie działa, jest normalnie wyświetlanie takie jak ten www.site.com/display.php?page=10. Chcę wyświetlić stronę taką jak ta www.site.com/article Próbowałem różnych rzeczy i bez rezultatu. Proszę, powiedz mi, jak zacząć pracować z wieloma regułami. Proszę również o poradę, jak korzystać z tej funkcjonalności w php, ponieważ myślę, że zrobiłem coś niedobrego. Mój kod php do stosowania tej zasady jest:

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

To działa, ale być może jest lepszy sposób, aby link do skorzystania z htaccess.

Odpowiedz

17

Te dwie zasady, które trzeba konfliktu, wzorce stosowane są dokładnie taką samą, co oznacza, inne niż warunki, które tylko dostać stosowanych do pierwszej reguły, dwie zasady są całkowicie nie do odróżnienia.

Biorąc pod uwagę ten URL:

http://www.site.com/blah 

Czy "blah" strona lub użytkownik? Nie można powiedzieć, ponieważ wzorzec regex (^([a-z0-9]+)$) dla obu reguł pasuje do "bla". Tak więc, pierwszy zawsze zostanie zastosowany bez względu na to, co. Trzeba dodać coś do rozróżnienia między 2, podobnie jak w tym „użytkownik” lub „strona” w URL:

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

A twoje zasady wyglądałby następująco:

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

dziękuję. Teraz jest bardziej jasne. –

0

Zrobiłem to działa lubię to.

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] 

użycie [N] (Next), aby kontynuować dodając reguły tego samego stanu i [L] (ostatni) w celu zidentyfikowania ostatnia reguła

+0

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