mod_rewrite: добавить запаздывание наклонной черты?

Я использую .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>
11
задан bkit 8 December 2011 в 23:51
поделиться

2 ответа

Эта строка:

RewriteCond %{REQUEST_FILENAME} -D

Должна была быть:

RewriteCond %{REQUEST_FILENAME} -d
10
ответ дан 3 December 2019 в 07:36
поделиться

А вы иметь в виду

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

0
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: