Мой файл .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.
Есть ли способ получить все подкаталоги в переменной страницы?
Я предлагаю добавить /
в список принятых символов в вашей последней строке: /?([A-Za-z0-9/-]+)/?$
.
Почему бы просто не захватить все ?
Например, я полагаю:
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']
containg 'blah' или 'blah/glop'
.
Это, как правило, то, что сделано с Zend Framework, например (см. Здесь для справки) .
На этой строке:
RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L]
Вы пропустили ^
чтобы соответствовать всей строке. Кроме того, в вашей строке вы хотите совместить /
в URL-адресе. Так должно было быть:
RewriteRule ^/?([A-Za-z0-9-/]+)/?$ index.php?page=$1 [QSA,L]
Отсутствие ^
даст вам последний нескромный матч.
Есть ли причина, по которой вы используете эти диапазоны символов?
Почему бы не использовать:
RewriteRule ^(.*)$ index.php?page=$1
Кроме того, опасность использует что-то вроде этого, вы можете пропустить переменную GET «page». Я не уверен, что имеет приоритет, но и плохое поведение.
Примеры, которые я видел в этом поведении, не передают путь как параметр GET, а вместо этого используют php для извлечения из $_SERVER['REQUEST_URI')
Если вы хотите разрешить только символы [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]
Кстати: вы должны выбрать одну орфографию с косой чертой или без нее и перенаправить, если это другая форма.