использование mod_rewrite для имитации нескольких подкаталогов - PullRequest
0 голосов
/ 12 марта 2011

Мой файл .htaccess в настоящее время выглядит следующим образом:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L]

Он отлично работает для URL, таких как http://site.com/aaaaa, но для URL, таких как http://site.com/aaaa/bbb $ _GET ['page'] переменная будет содержать только bbb, а не aaaaa / bbb.

Есть ли способ получить все подкаталоги в переменной страницы?

Ответы [ 5 ]

1 голос
/ 12 марта 2011

В этой строке:

RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L]

Вы пропустили ^, чтобы соответствовать всей строке.Кроме того, в вашей строке вы хотите соответствовать / в URL.Так и должно было быть:

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

Пропуск ^ даст вам последний нечестивый матч.

1 голос
/ 12 марта 2011

Почему бы просто не захватить все ?

Примерно так:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) temp.php?page=$1 [QSA,L]


С этим (учитывая, что мой сценарий находится впапка temp) , оба http://tests/temp/blah и http://tests/temp/blah/glop перенаправляются на t emp.php, с $_GET['page'], связывающимися с 'бла' или 'blah/glop'.


Это обычночто сделано с Zend Framework, например (см. здесь для справки) .

1 голос
/ 12 марта 2011

Я предлагаю добавить / в список допустимых символов в вашей последней строке: /?([A-Za-z0-9/-]+)/?$.

0 голосов
/ 12 марта 2011

Если вы хотите разрешить символы [A-Za-z0-9-] в каждом сегментах пути , попробуйте следующее:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([A-Za-z0-9-]+(/[A-Za-z0-9-]+)*)/?$ index.php?page=$1 [QSA,L]

Кстати: вы должны выбрать одно написание, с косой чертой или без нее, и перенаправить, если это другая форма.

0 голосов
/ 12 марта 2011

Есть ли причина, по которой вы используете эти диапазоны символов?

Почему бы не использовать:

RewriteRule ^(.*)$ index.php?page=$1

Также опасность заключается в том, что вы можете пропустить переменную GET "page". Я не уверен, что имеет приоритет, но либо плохое поведение.

Примеры, которые я видел в этом поведении, не пропускают путь как параметр GET, а вместо этого используют php для извлечения его из $_SERVER['REQUEST_URI')

...