URLrewriting için regex eğer DEĞİL ". Php"

4 Cevap php

my boss wants me to code an URLrewriting for, let's say "http://our.domain.com/SomeText" -- that is, if the URL does NOT contain ".php" or ".html", it should be processed by a script like "http://our.domain.com/process.php?string=SomeText". Is this possible with a simple regex? I just cannot find the right expression to do this. I started by redirecting requests to some special subdir, but now it should work directly without any further subdir, so I somehow have to separate regular requests for exuisting pages to requests that don't contain ".php" or ".html"...

Benim için herhangi bir tavsiye veya bağlantı?

Best regards, Roman.

4 Cevap

.. Böyle yeniden yazma php ve html URL'ler için bu yapabileceğini mod_rewite kullanma:

RewriteEngine on
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]

Ancak aynı zamanda, aslında mevcut dosyaların yeniden-yazma URL'leri durdurmak isteyebilirsiniz. (Ortalıkta diğer dosyalar olabilir - yeniden yazılması istemiyorum images / css vb) Sen çek eklemek için yukarıdaki değişiklik olabilir:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]

Bu çeki ekleme aslında istenen dosya yoksa sadece yeniden yazılması olacağını biliyorum çünkü uzantısı. Php veya. Html dışında başka bir şey olup olmadığını kontrol gerekmez anlamına gelebilir, bu nedenle RewriteRule çizgi değişiklik olabilir Bu olması için:

RewriteRule ^(.*)$ process.php/$1 [NC] [QSA]

Bu bir dosya process.php tarafından ele alınacaktır olarak yok istenen herhangi bir URL'yi anlamına gelecektir.

Böyle bir şey hile yapmak gerekir

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.php
RewriteCond %{REQUEST_URI} !\.html
RewriteRule (.*) /process.php?string=$1 [QSA]

bu. htaccess veya doğrudan VirtualHostuna tanımı (/ a lider koymak ya da değil) gidecek eğer ilgili bazı uyarılar vardır.

Ayrıca mod_rewrite yüklemek gerekir.

Tüm bu aslında Apache kullanıyorsanız ve mod_rewrite kullanabilirsiniz varsayarak.

Ne yapar istenen URI dizeleri. Php içeren ve. Bunu html yoksa o zaman içten bir sorgu dizesi bir argüman olarak yazılmıştır ne process.php dosyaya istekleri yönlendirir olmasıdır.

Bu daha sonra kullanmanız ile ilgili sorunlar varsa,

RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9

ve nasıl çalıştığını kontrol edin. Bu çalışması için bir ana yapılandırma dosyası (mümkünse yok. Htaccess) kullanılmak üzere sahip olarak, sunucu kontrol etmek zorunda.

Eğer yeniden mod kullanmak Yüklü neden?

açıklamak için link:

http://www.workingwith.me.uk/articles/scripting/mod_rewrite

En azından mod_rewrite ile. Php ve. Html eşleşen bir düzenli ifade kullanın ve daha sonra bir!, Bunu inkâr hangi o Önlerine.