Ответ 1
Вздох.
Эта строка:
RewriteCond %{REQUEST_FILENAME} -D
Должно быть:
RewriteCond %{REQUEST_FILENAME} -D
Я использую файл .htaccess, чтобы направлять запросы к каталогу в настраиваемый php файл, который предоставляет информацию об этом каталоге (и я хочу, чтобы URL-адрес, отображаемый браузером, не изменялся).
Вот соответствующая часть файла .htaccess.
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ /myphp.php?url=%{REQUEST_URI} [QSA,L]
Это хорошо работает, если вы перейдете в каталог и включите конечную косую черту:
http://domain.com/path/
Но без конечной косой черты это не
http://domain.com/path
URL-адрес (показано в браузере) превращается в:
http://localhost:8888/path/?url=/path
Я попытался исправить это, добавив правило выше этого правила:
RewriteCond %{REQUEST_FILENAME} -D
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]
Но это не работает для меня.
Как я могу получить .htaccess для добавления конечной косой черты, если она опущена, а затем действовать так, как если бы она была там?
Спасибо
Обновление: В соответствии с просьбой, вот что все.
<IfModule mod_rewrite.c>
RewriteEngine On
#force trailing slashes on real directories
RewriteCond %{REQUEST_FILENAME} -D
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]
#use the directory viewer on directories without an index page
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ /myphp.php?url=%{REQUEST_URI} [QSA,L]
</IfModule>
Вздох.
Эта строка:
RewriteCond %{REQUEST_FILENAME} -D
Должно быть:
RewriteCond %{REQUEST_FILENAME} -D
Не беспокоитесь о перезаписи мод, для него есть директива
<Location /some/path>
DirectorySlash On
SetHandler some-handler
</Location>
Вы имели в виду
RewriteRule ^(.*)$ $1/ [L]
вместо
Я не знаю о вашем подходе. Я бы попробовал что-то вроде
RewriteRule ^/(\S+)/?$ /myphp.php?url=$1
Я использовал это для перезаписи раньше, и он работает:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ http://www.domain.com$1
RewriteRule ^/(\S+)/?$ /myphp.php?url=$1
Обратите внимание, что в первом правиле я не включал конечную косую черту.
Кроме того, я бы посоветовал вам не полагаться на .htaccess, если это абсолютно необходимо. Это связано с тем, что сервер будет постоянно проверять файлы .htaccess. Использование файла httpd.conf вместо этого означает, что apache будет загружать только условия и правила один раз. По крайней мере, мне посоветовали сделать это из-за этого.
Попробуйте это. Он добавит конечную косую черту в запросы каталога, у которых нет косой черты.
<IfModule mod_rewrite.c>
RewriteEngine On
#use the directory viewer on directories without an index page
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*?)/?$ /myphp.php?url=$1/ [QSA,L]
</IfModule>