I want to have a url like http://localhost/folder1/folder2/folder3/file Then i want mod_rewrite to convert it to $_GET['d'] in the url it would look like d[]=folder1&d[]=folder2&d[]=folder3
Bu mümkün mü?
Teşekkür ederiz.
I want to have a url like http://localhost/folder1/folder2/folder3/file Then i want mod_rewrite to convert it to $_GET['d'] in the url it would look like d[]=folder1&d[]=folder2&d[]=folder3
Bu mümkün mü?
Teşekkür ederiz.
Evet bu mümkün:
RewriteRule ^(([^/]+/)*)([^/]+)/([^/]+)$ /$1$4?d[]=$3 [QSA,N]
RewriteRule ^([^/]+)$ - [L]
Ama mod_rewrite gerçekten işin bu tür için uygun değildir. Aslında, hızlı N bayrağı a> ile sonsuz bir döngü oluşturabilirsiniz.
Bunun yerine istenen URL yolunu kendi bölümleri ayıklamak için PHP kullanmak gerekir:
$path = strtok($_SERVER['REQUEST_URI'], '?');
$segments = implode('/', ltrim($path, '/'));
Sonra dosyaya isteklerini yeniden yazmak için bu tek kuralı kullanın:
RewriteRule ^([^/]+/)+([^/]+)$ $2 [L]
Bu benim seviyelerde sınırsız miktarda Seach Motoru Dostu URL'ler için ne olduğunu. Aynı zamanda size sorgu dizeleri veya izin seçeneği verir ve görüntüler, CSS ve JavaScript gibi gerçek klasörlere veya dosyalara adresler yeniden yazacak değil.
Apache ...
# Do not use htaccess if you can avoid it, instead write all of this in the httpd.conf <VirtualHost /> and disable .htaccess for performance/security.
RewriteEngine On
RewriteBase /
# Redirect non-www traffic to www.domain.co.uk/request
RewriteCond %{HTTP_HOST} !^www\.domain\.co\.uk$ [NC]
RewriteRule ^(.*)$ http://www.domain.co.uk/$1 [R=301,L]
# Do not rewrite real files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*/ - [L]
# Use 1 or 2 Below
# 1. SEO Friendly URLs (don't allow additional query strings /foo/bar/)
# RewriteRule ^([A-Za-z0-9/-]*)$ index.php?request=$1 [L]
# 2. SEO Friendly URLs (allow additional query strings /foo/bar/?q=search)
RewriteRule ^([A-Za-z0-9/-]*)$ index.php?request=$1 [L,QSA]
PHP ...
<?php
/*
Title: Request
Gets the client request and sanitizes the user input.
Returns:
Array of parts of the URL.
> $request = /path/to/page/
> var_dump($request);
> array(3) { [0]=> string(4) "path" [1]=> string(2) "to" [2]=> string(4) "page" }
*/
// Check request exists
if (isset($_GET['request']) && !empty($_GET['request']))
{
// Yes. Sanitize request.
// request should be made lowercase, as URLs should not be case-sensitive.
$request = strtolower($_GET['request']);
// Sanitize request incase the user tries to circumvent the .htaccess rules and uses the query string directly. index.php?request=
$request = preg_replace("([^a-z0-9-/])", '', $request);
// Check if request ends with trailing slash to ensure all crawled URLs end with a trailing slash. ($request does not include other query strings or anchors)
if ((substr($request, -1, 1)) == '/')
{
// Yes, request should now be safe to use.
$safe['url'] = $request;
// Split request into an array with values for each directory.
$safe['request'] = explode('/', $request, -1);
// Destroy user input to prevent usage.
unset($_GET['request'], $request);
}
else
{
// No, redirect to request with trailing slash.
header('Location: /' . $request . '/', true, 301);
exit;
}
}
else
{
// No.
$safe['request'] = false;
}
?>
Daha sonra uygun fonksiyonları ile isteği işleyen bir yönlendirme dosyası var. Bu kodu bir sürü gibi görünüyor ama ben sadece istek gerektirir sınıfları / işlevleri dahil olarak organize ve verimli tutmak yardımcı olur belki.
Benim projeler için kullanılacak böylece GPL v3 kodunu kullanmak için çekinmeyin (ağladığını duymak başka bir çerçeve değil, Urgh) kodu kütüphanesinin serbest düşünüyorum.
Umarım bu yardımcı olur.
Kullanmak için iyi bir tekniktir bir ön denetleyicisi (MVC tasarım deseni parçasıdır.) Bir ön denetleyicisi, web sitenizin aldığı her isteği yönlendirilen bir (PHP) dosyasıdır. Ön Kontrolör daha sonra istek tür (vb, sayfa X'te formu Y sunulması bakmak) bağlı olarak diğer dosyalara isteği gönderir. Örneğin @ Ray Hidayat tarafından açıklanan tekniği kullanarak, istek url "kesip" olabilir, ve isteği işlemek ve ya cevap vermelidir sitenizin hangi parçası belirlemek için bakmak.
Örneğin: Zend Framework ve Drupal hem de bu tekniği kullanabilirsiniz. Bu gibi durumlarda, ve ben çoğu durumda, sitenin kök index.php ön kontrolör olduğunu düşünüyorum, bu yüzden www.example.com / index.php
Bunu ön denetleyicisi yönlendirmek için her isteği mod_rewrite kullanabilirsiniz.
RewriteEngine on
RewriteRule .* index.php
Sen images / files / CSS ve javascript kütüphanesi için aşağıdaki mod_rewrite komut dosyası kullanabilirsiniz.
RewriteEngine off
İyi şanslar!