Apache Mod Rewrite: L argümanı ile RewriteRule.

4 Cevap php

Ben bir php uygulama geliştiriyorum ve Apache ve Mod Rewrite ile küçük bir sorunu var. ? Herkes burada neyin yanlış olduğunu bilir:

RewriteEngine on
RewriteBase /mysite/
RewriteRule ^css\/css\.css css/css.php [L]
RewriteRule ^js\/js\.js js/js.php [L]
RewriteRule !^img\/.* index.php

When I put http://localhost/css/css.css appears index.php, maybe I'm missing something... Why when the url matchs with the first rule apache doesn't stop the rewriting process?

'Son | L' (son kural)

Stop the rewriting process here and don't apply any more rewriting rules. This corresponds to the Perl last command or the break command from the C language. Use this flag to prevent the currently rewritten URL from being rewritten further by following rules. For example, use it to rewrite the root-path URL ('/') to a real one, e.g., '/e/www/'.

Ben 3 saat beri forumları ve belgeler readed ve ben hala aynı sorun var.

Şimdiden teşekkürler.

4 Cevap

Ben bir çözüm buldum:

RewriteEngine on
RewriteBase /mysite/

RewriteRule ^css\/css\.css css/css.php [L]
RewriteRule ^css\/(.*)$ css/$1 [L]
RewriteRule ^js\/js\.js js/js.php [L]
RewriteRule ^js\/(.*)$ js/$1 [L]
RewriteRule ^img/(.*)$ img/$1 [L]
RewriteRule ^(.*)$ index.php?rewrite=$1

Gayet iyi çalışıyor, ama bu yüzden gerekli bilmiyorum

RewriteRule ^css\/(.*)$ css/$1 [L]

ve

RewriteRule ^js\/(.*)$ js/$1 [L]

Ben kimseyi hepls umuyoruz.

Teşekkürler! :)

Centauro12, sorun aslında [L] bayrağı (bir. Htaccess dosyası varsa), but then aşağıdaki kurallar yoluyla yayılımı durur, bir URL eşleme starts over again. Bu all Kurallarınızın daha sonra bir kez daha işlenecektir anlamına gelir. Ayrıntılar için Apache Rewrite Guide bakın.

Bu nedenle açıkça yazılabilir php scriptler için yeniden devre dışı bırakmanız gerekir:

RewriteRule ^css/css.php - [L]
RewriteRule ^js/js.php - [L]

ya da (belki de istediğini değil rağmen) daha kompakt:

# don't rewrite anything that really exists
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]

denemek

RewriteRule ^/css/css\.css css/css.php [L]
RewriteRule ^/js/js\.js js/js.php [L]
RewriteRule ! /^img/.* index.php

yani. Eğer dizenin başına ^-çapa pattern, bir / ile başlarsanız. desenler / ile başlar ki, URL-paths karşı eşleştirilir.

EDIT

Yukarıdaki sunucu geneli, sanal konak, dizin ve için geçerli olan context sadece. bağlam. htaccess ise, ilk eğik çizgi dahil olmak üzere dizin başına prefix yani ^/ için gerek burada, kural eşleşti önce elimden (ve daha sonra önüne) edilmektedir.

Eğer yeniden yazma tabanını ayarlamak için "/" ile ifade başlamadan önce "^ css ..." olabilir

RewriteBase /