2010-08-30 2 views
-2

Переписан мой url. Однако я все еще могу получить доступ к переписанным URL-адресам с вопросительными знаками и знаками.Необходимо переписать вопросительные знаки и знаки равенства в URL-адресе

lovelakedistrict.com/lake-district-cottages/?cottages=2/ 
lovelakedistrict.com/lake-district-cottages/?cottages/2/ 
lovelakedistrict.com/lake-district-cottages/cottages/2/ 

Три URLs выше точно такая же страница, я хотел бы, чтобы правильно переписать их, чтобы они перенаправлять на правильную структуру (последний URL), чтобы остановить дублирование веб-страниц.

Options +FollowSymlinks 
Options +Indexes 
RewriteEngine on 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^.#?\ ]+)\.php([#?][^\ ]*)?\ HTTP/ 

RewriteCond %1 !^include/ 
RewriteRule ^([^.]+)\.php$ /$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ $1.php 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 

RewriteRule ^lake-district-cottages/cottages/([0-9]+) lake-district-cottages.php?cottages=$1 

ответ

2

Попробуйте эти правила:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*(&+(.*))$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/?%3 [N] 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/?%4 [L,R=301] 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*=/*([^&]*[^&/])/*(&+(.*))$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/%2/?%4 [N] 

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^/*([^=&]*[^=&/])/*=/*([^&]*[^&/])/*$ 
RewriteRule ^(.*[^/])/?$ /$1/%1/%2/? [L,R=301] 

Но я думаю, проще всего было бы использовать более мощный язык, чем mod_rewrite как PHP:

$parts = explode('?', $_SERVER['REQUEST_URI'], 2); 
if (count($parts) === 2) { 
    $path = rtrim($parts[0], '/'); 
    parse_str($parts[1], $params); 
    foreach ($params as $key => $value) { 
     $path .= '/' . (($value === '') ? trim($key, '/') : trim($key, '/') . '/' . trim($value, '/')); 
    } 
    header('Location: http://example.com'.$path.'/', true, 301); 
    exit; 
} 
+0

правила htacccess работают хорошо, кроме когда Я пробую это, например, http://www.lovelakedistrict.com/lake-district-cottages/?cottages=2/ направляет на http://www.lovelakedistrict.com/ озеро-район-коттеджи.php/коттеджи/2/ (добавление на расширение php) - можно ли это удалить? спасибо за ваш быстрый ответ – AJFMEDIA

+0

@ajfmedia: Возможно, это связано с тем, что вы используете эти правила. Обязательно поместите эти правила, которые вызывают внешнее перенаправление, до тех правил, которые просто вызывают внутреннюю переадресацию. – Gumbo

+0

его хорошо отсортировано сейчас :) спасибо alot – AJFMEDIA

Смежные вопросы