Я использую .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
А вы иметь в виду
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 будет загружать условия и правила только один раз. По крайней мере, мне посоветовали сделать это из-за этого.