.htaccess mod_rewrite добавить «/» в конец url

#.htaccess #mod-rewrite

#.htaccess #переписать мод

Вопрос:

Это мой код .htaccess:

 RewriteBase /kajak/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^moduli/([^/] )/(.*)$ moduli/$1/index.php/$2 [L]
  

Теперь / добавляется к каждому URL-адресу. Например, http://127.0.0.1/moduli/novice становится http://127.0.0.1/moduli/novice/ .

Как я могу предотвратить получение / в конце?

Комментарии:

1. Либо, пожалуйста, объясните, что вы хотели бы сделать более продуманным способом (возможно, расширяя, почему ваша база перезаписи / kajak / и все же / kajak / отсутствует в ваших примерах URL-адресов), либо выберите ответ ниже в качестве ответа на ваш вопрос.

Ответ №1:

Хотя я не знаю ответа на ваш вопрос, я отмечу две странности в вашем вопросе и вашем коде, которые могут быть связаны с рассматриваемой проблемой.

  1. С базой перезаписи, которая есть в вашем коде, эти правила даже не должны запускаться.

  2. Хотя я сам новичок в регулярных выражениях, я смотрю на ([^ /] ) и немного смущен тем, почему вы это записываете. Я знаю, что ^ соответствует НАЧАЛУ строки, что никогда не было бы правдой, поскольку у вас уже есть другой в реальном начале строки.

При этом я бы, вероятно, написал код следующим образом:

 RewriteBase /moduli/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ $1/index.php/$2 [L]
  

Это приведет к перезаписи URL-адресов, как показано ниже:

 http://www.website.com/moduli/novice/view
http://www.website.com/moduli/novice/index.php/view
  

Судя по вашему блоку кода, это, похоже, то, что вы пытаетесь сделать. Если это не так, то я сожалею.

Комментарии:

1. спасибо за ваш ответ. Ваш код лучше и работает нормально, но у вас та же проблема. Все еще добавляйте «/» в конец URL-адреса.

2. Добро пожаловать. Если мой ответ был ответом на ваш вопрос, пожалуйста, отметьте is как таковой.

Ответ №2:

Я не думаю, что это связано с вашим правилом перезаписи (оно ему не соответствует).

/ добавляется потому, что, когда вы запрашиваете, http://example.com/xx/zz и веб-сервер обнаруживает, zz что это каталог, он преобразует его в http://example.com/xx/zz/ через перенаправление 301 (браузер выполняет другой запрос — проверьте журналы apache).

Прочитайте о переадресации с косой чертой в конце здесь.

The, вы должны спросить себя, что вы хотите, чтобы происходило, когда запрашиваемый URL http://127.0.0.1/moduli/novice/ (Вы хотите, чтобы он был перехвачен вашим перенаправлением или нет? В настоящее время это не отслеживается из-за RewriteCond %{REQUEST_FILENAME} !-d )

Кстати, я не совсем понимаю вашу RewriteBase /kajak/ строку там — вы уверены, что это правильно?

Комментарии:

1. это правильно, потому что папка kajak. Но я редактирую код так, как предлагает cbroughton. Да, я хочу, чтобы меня кэшировали перенаправлением