2016-11-10 6 views
1

Я набор ссылок, как, например:.htaccess - переписывание динамических связей (в зависимости от значения переменной)

samplefile.php?post=Test 1 
samplefile.php?post=Test 2 
... 
samplefile.php?post=Test 14 
... 

Я хотел бы переписать или перенаправить его соответственно: (нужно оба варианта для 2 отдельных случаев)

samplefile-Test-1.php and (samplefileTest1.php) 
samplefile-Test2.php and (samplefileTest2.php) 
... 
samplefile-Test-14.php and (samplefileTest14.php) 
... 

Для замены пустого пространства на «-» или обрезания пустого пространства вообще. Можно ли достичь того, чего я хочу? Если да, то как это сделать? Благодарим вас за помощь!

UPDATE: Я могу это сделать, но это не достаточно хорошо, в надежде сделать лучше (:

RewriteCond %{QUERY_STRING} ^post=(.*)$ 
RewriteRule ^samplefile\.php$ http://www.exampledomain.com/? [R=301,L] 
+0

У вас уже есть правила перезаписи? Если да, то покажите их под вопросом. – anubhava

+0

@anubhava Не слишком много. Вот почему я спрашиваю. На данный момент я могу перенаправить все эти файлы на одну общую ссылку, это нормально, но в идеале я хотел бы добиться того, что я прошу. Я осведомил вопрос. – Nita

ответ

1

Вы можете использовать эти 2 определенный набор правил:

Для samplefile-Test-1.php, samplefile-Test-2.php .. samplefile-Test-3.php

# first strip query string and redirect /samplefile.php?post=Test 1 to 
# /samplefile-Test 1.php 
RewriteCond %{QUERY_STRING} ^post=([^&]+) [NC] 
RewriteRule ^(samplefile)\.php/?$ /$1-%1.php? [NC,L,NE,R=302] 

# if URL only has white-spaces in the middle then redirect to 
# /testfile-Test-1.php 
RewriteRule ^samplefile(-\S*)\s+(\S*\.php)$ /testfile$1-$2 [L,NE,R=302] 

# if URL has white spaces at multiple places then replace whitespace by hyphen 
# and loop the rule 
RewriteRule ^(samplefile-\S*)\s+(\S+\s+.*\.php)$ /$1-$2 [N,NC,DPI] 

Для samplefileTest1.php, samplefileTest2.php .. samplefileTest14.php

RewriteCond %{QUERY_STRING} ^post=([^&]+) [NC] 
RewriteRule ^(samplefile)\.php/?$ /$1%1.php? [NC,L,NE,R] 

RewriteRule ^samplefile(\S*)\s+(\S*\.php)$ /testfile$1$2 [L,NE,NC,R=302] 
RewriteRule ^(samplefile\S*)\s+(\S+\s+.*\.php)$ /$1$2 [N,NC,DPI] 
+0

Ничего себе. Большое спасибо @anubhavaI, он отлично работает. Не могли бы вы так любезно дать мне краткое объяснение. При тестировании возникает новая необходимость. Я пытался разобраться, не беспокоясь, но я думаю, что мне предстоит пройти долгий путь, чтобы понять перенаправления на более высоком уровне. Что делать, если хотите изменить имя конечного файла (testfile-Test-1.php или testfileTest1.php)? Учет начальной точки остается тем же ... samplefile.php? Post = Test 1 – Nita

+0

Я изменил ответ для '/ testfile-Test-1.php' и добавил некоторые комментарии. – anubhava

+0

спасибо, anubhava не хотят быть слишком надуманными, но вы должны посоветовать мне перенаправить на другое имя файла или создать отдельный вопрос. – Nita

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