2013-10-01 2 views
1

У меня есть ниже в моем файле .htaccessПротиворечивых URL Переписывая

RewriteRule ^([A-Za-z0-9-]+)$ /j/view.php?cat=$1 [L] 
RewriteRule ^([A-Za-z0-9-]+)$ /j/display.php?name=$1 [L] 

Как переписать, чтобы получить URL в http://domain.com/some-file-name. Таким образом, браузер интерпретирует, что правило перезаписи начинается первым в строке при нажатии ссылки, поскольку URL-адреса имеют одинаковый формат.

Как исправить это, чтобы понять, какой URL-адрес интерпретировать и отображать правильно, сохраняя при этом одну и ту же структуру URL-адреса.

В настоящее время, если я перемещаю # 2 выше, он начинает интерпретировать # 2, и если я разрешаю как есть, он интерпретирует # 1. Пожалуйста, мне нужна помощь здесь.

+0

Если нет постоянной разницы между два, вы не можете сделать это с помощью '.htaccess' в одиночку. Вы можете использовать php-страницу маршрутизатора, хотя это сделает разумный выбор. – Sumurai8

+0

@ Sumurai8 Как работает страница маршрутизатора? Можете ли вы дать образец и объяснить далее, пожалуйста. – OmniPotens

+0

Что вы пытаетесь сделать? Прямо сейчас обе строки переписываются с одинаковыми критериями (весь буквенно-цифровой текст). Если вы хотите, чтобы они переписывали разные URL-адреса, вам нужно либо сделать ваш REGEX более конкретным в вашем правиле перезаписи, либо добавить условие перезаписи, например. RewriteRule^view/([A-Za-z0-9 -] +) $ /j/view.php?cat=$1 – djh101

ответ

1

В одном из своих комментариев вы спросили:

If I were to make URL become http://domain.com/some-file-name for "view.php" and http://domain.com/some-file-name---[id] for "display.php" where "[id]" will be the "group_id" number in the database, will it make a difference in their URL and cause it to rewrite well?

Да это будет возможно со следующими правилами:

# first try to see if belongs to /j/view.php based on URI pattern 
RewriteRule ^([a-z0-9-]+)---([0-9]+)/?$ /j/view.php?cat=$1&id=$2 [L,NC,QSA] 

# No try /j/display.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-z0-9-]+)/?$ /j/display.php?name=$1 [L,NC,QSA] 
+0

Спасибо вам за свидание. Я пробовал реализацию, но перенаправляет все на display.php RULE. Любые другие лидеры? Это действительно привело меня в такое слабое состояние, что я не смог заставить его работать. Еще раз спасибо за вашу помощь. – OmniPotens

+0

Какой URL-адрес вы использовали для тестирования? – anubhava

+0

Только если URL-адрес похож на '/ some-file-name --- 10', то он будет got /'/j/view.php', иначе он будет got/'/ j/display.php'. Я уже тестировал выше код, и это работает отлично. – anubhava

0

Если между URL нет постоянной разницы, вы не можете постоянно разделять запросы между этими двумя страницами. Я рекомендую изменить URL-адрес, чтобы каждая из двух страниц имела свой собственный префикс.

RewriteRule ^c-([A-Za-z0-9-]+)$ /j/view.php?cat=$1 [L] 
RewriteRule ^n-([A-Za-z0-9-]+)$ /j/display.php?name=$1 [L] 

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

RewriteRule ^([A-Za-z0-9-]+)$ /j/router.php?page=$1 [L] 

и файл router.php с чем-то вроде следующего кода. Очевидно, я не могу сказать, какая разница между ними. Может быть, вы можете сопоставить его с базой данных или чем-то еще.

<?php 
if(condition to check $_GET['page'] for view.php) { 
    $_GET['cat'] = $_GET['page']; 
    include('/j/view.php'); 
} else { 
    $_GET['name'] = $_GET['page']; 
    include('/j/display.php'); 
} 
+0

Пожалуйста, дайте мне пример того, какие условия я должен проверить здесь. Страницы также вызывается из базы данных. 'view.php' получает« все созданные группы »в моей программе, а' display.php' отображает конкретную информацию о каждой группе. – OmniPotens

+1

Извините, вам придется сделать это самостоятельно. Я не могу волшебно узнать о вашем полном бэкэнде и, честно говоря, вы должны сами создать это условие ... – Sumurai8

+0

Если я получу представление о каком-то состоянии, то я должен быть в состоянии. Я уже пробовал запросы GET, которые должны получать страницы из БД, но я получаю общую белую страницу без ошибок. Это было, как я спросил, так как это полностью потеряло меня, поскольку у меня нет ошибок, чтобы узнать, откуда взять мою опору. – OmniPotens

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