Строка запроса htaccess для нескольких путей - PullRequest
1 голос
/ 24 июня 2010

У меня есть сайт со следующим правилом .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?id=$1
</IfModule>

Это прекрасно работает, но мне нужно расширить его, чтобы, если пользователь выбрал другой путь, я могу его переслать (но корневой путь все еще должен работать). Я попробовал это, но сайт просто продолжает обрабатывать первый RewriteRule:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?id=$1
RewriteRule /^(.*)$/^(.*)$ /$1.php?id=$2
</IfModule>

Есть идеи?

Таким образом, корневая страница может быть

  • domain.com / doug, так что это /index.php?id=doug
  • domain.com / dave, так что это /index.php?id=dave

Внутренний путь может быть

  • domain.com / group / object1, так что это /group.php?id=object1
  • domain.com / group / object2, так что это /group.php?id=object2
  • domain.com / admin / login, так что это /admin.php?id=login

1 Ответ

1 голос
/ 28 июня 2010

Хорошо, я думаю, вы должны пойти по-другому.

Самый простой способ - просто передать все на index.php, нарезать $_GET['id'] и switch($id[0]) в корневой папке.('admin', 'group' и т. д.) в качестве параметра в вашем скрипте.

Возможно, даже include("group.php") или admin.php внутри индекса.

В противном случае вы столкнетесь с проблемой перехода корневого URL на непредусмотренные страницы, такие как: doug.php и dave.php

Это можно сделать текущим способом 'Во-первых, но вам нужно будет жестко кодировать случаи для каждой корневой папки:

Пример:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/admin/(.*)$ /admin.php?id=$1 [L,NC]
RewriteRule ^/group/(.*)$ /group.php?id=$1 [L,NC]
RewriteRule ^(.*)$ /index.php?id=$1

Они понадобятся вам над рабочей строкой RewriteRule.Эта строка всегда должна быть последней, так как это случай «все поймал / ничего больше не соответствует» / «по умолчанию».

Если жесткое кодирование корневых страниц не подходит (слишком много дам или всегда неизвестно), вам в конечном итоге было бы лучше, если бы ваш index.php просто все обрабатывал.

Надеюсь, это поможет.

...