Как заставить .htaccess работать с текущим каталогом, а не с подкаталогами? - PullRequest
2 голосов
/ 29 июля 2009

Я использую mod rewrite для косвенного доступа к моим PHP-файлам в корневом каталоге моего сайта. В настоящее время у меня есть что-то вроде этого

RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]

Но я бы хотел использовать

RewriteRule ^(.*)$ /$1.php [L]

Чтобы мне не пришлось обновлять мой файл .htaccess всякий раз, когда я хочу добавить новую страницу на свой веб-сайт. Однако проблема в том, что это влияет и на мои подкаталоги. Что делает CSS, javascript, изображения недоступными, потому что он перенаправляет на "/dir/example.png.php".

Так какое же лучшее решение здесь?

Ответы [ 4 ]

3 голосов
/ 29 июля 2009

Попробуйте это правило:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule .* $0.php [L]
2 голосов
/ 29 июля 2009

Изменить .htaccess на это:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1.php [L]

После запуска механизма перезаписи он сначала проверит, является ли запрошенный файл фактическим файлом в системе или фактически каталогом. Если это не один из них, он выполнит правило, которое в данном случае состоит в том, чтобы попытаться найти файл, добавив .php и обработав его.

Подкаталоги, изображения, CSS и т. П. Будут в порядке, потому что они перестанут переписываться, как только будут найдены.

1 голос
/ 29 июля 2009

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

Следующее будет игнорировать подпапки "images" и "js" и перенаправлять все остальное

RewriteRule   ^images*   -  [L]
RewriteRule   ^js*       -  [L]
RewriteRule   ^(.*)$     /$1.php   [L]
0 голосов
/ 29 июля 2009

Примерно так (обратите внимание!):

RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php
...