У меня было много похожих вопросов, но я не смог найти этот конкретный случай:
Имея такую структуру:
public_html/
q/
.htaccess
index.php
/dirnofixedname1
/dirnofixedname2
/dirnofixedname3
- dirnofixednameN - это папки с файламидолжен использоваться index.php и не быть напрямую доступным (называется так, поскольку я не могу перечислить все в файле .htaccess или это будет нецелесообразно)
- index.php должен обрабатывать входящие запросы
Намерение состоит в том, чтобы обрабатывать запросы, такие как: http://domain/q/dirnofixedname2
с http://domain/q/index.php?q=dirnofixedname2
, пока отображается http://domain/q/dirnofixedname2
.Действительно популярный и уже раскрытый случай.
Так что файл .htaccess:
RewriteEngine On
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php?q=$1 [L]
Проблема возникает в том, что когда запрос соответствует этим существующим каталогам (что я хочу), он работает какпредназначен (index.php
выполняется и получает q
), но делает перенаправление на:
http://domain/q/dirnofixedname2/?q=dirnofixedname2
(и показывает это в строке URL) вместо предназначенного:
http://domain/q/dirnofixedname2
В частности, если каталог не существует,
http://domain/q/dirthatdoesnotexist
Правильно обрабатывается index.php
с q
как dirthatdoesnotexist
(скрипт явно отклоняет это и ничего не возвращает).
Есть ли у вас какие-либо идеи о том, как избежать этого перенаправления в тех случаях, когда существует подкаталог?(Практически иметь то же имя dir, что и у параметра)