переписать на стороне сервера htaccess не работает - PullRequest
2 голосов
/ 21 декабря 2011

У меня работает моя перезапись htacess, страницы идут туда, куда они должны, но строка URL меняется, и я этого не хочу.Я думал, что это было ВНУТРЕННЕЕ перенаправление, и все, что находится в URL, будет отображаться.Это не работает таким образом.

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/[^/]+(/(.+))?$
RewriteRule . /%2 [L] 

По сути, URL перезаписывается на новый URL.Как мне заставить его этого не делать?

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Для вашего последнего комментария, попробуйте это вместо

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/[^/]+(/?|/(.+))$
RewriteRule . /%2 [L]

Он должен соответствовать дополнительному завершающему слешу, например http://mydomain.com/somedir или http://mydomain.com/somedir/ и одному с каталогом после, например, http://mydomain.com/somedir/dir2

1 голос
/ 21 декабря 2011

Если какое-либо совпадение обратной ссылки % 2 не заканчивается расширением, mod_dir может подумать, что это каталог. Если отсутствует косая черта, mod_dir извне перенаправит браузер на тот же URL, но с косой чертой. Вы можете попробовать включить DirectorySlash Off в файле .htaccess или в конфигурации сервера.

редактировать

Вы можете попытаться обойти mod_dir, выполнив проверку каталога самостоятельно и добавив косую черту, чтобы mod_dir не перенаправлял вас. Это будет выглядеть примерно так:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/[^/]+(/(.+))$
RewriteCond %{DOCUMENT_ROOT}/%2 -d
RewriteRule ^[^/]+(/(.+))$ /$2/ [L]
...