htaccess для перенаправления /login/ и /login на одну и ту же страницу?

У меня есть следующее правило в моем текущем файле .htaccess для перенаправления /videos/login/ запросов на /videos/login.php

RewriteRule login/ /videos/login.php

Это отлично работает, если я получаю доступ к странице входа, используя http://mysite.com/videos/login/, но когда я пытаюсь получить доступ к той же странице, используя http://mysite.com/videos/login (без косой черты), это дает мне ошибку «404 страница не найдена».

Скажите, пожалуйста, каким будет правильное правило файла .htaccess, чтобы любой запрос для http://mysite.com/videos/login/ или http://mysite.com/videos/login указывал на одну и ту же страницу /videos/login.php.

Спасибо


person Prashant    schedule 09.07.2009    source источник


Ответы (4)


Просто сделайте завершающую косую черту необязательной:

RewriteRule ^videos/login/?$ /videos/login.php

Но вам лучше использовать только один вариант (с завершающей косой чертой или без нее) и перенаправлять один на другой:

# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ /$0/ [L,R=301]

# remove trailing slash
RewriteRule (.*)/$ /$1 [L,R=301]
person Gumbo    schedule 09.07.2009
comment
@Gumbo, ваше правило работает нормально, оно открывает одну и ту же страницу с косой чертой и без нее, но я хочу, чтобы, когда кто-либо получит доступ к /videos/login, он был перенаправлен на /videos/login/, возможно ли это с помощью htaccess. - person Prashant; 10.07.2009
comment
Я просто упомянул оба варианта. Если вам нужна косая черта в конце, просто используйте первую. - person Gumbo; 10.07.2009
comment
Но #add завершающая косая черта добавит косые черты ко всем моим URL-адресам, которые мне не нужны, есть некоторые выбранные URL-адреса, для которых я хочу это средство - person Prashant; 10.07.2009
comment
Косая черта будет добавлена ​​к каждому URL-адресу, который не может быть сопоставлен с существующим файлом (RewriteCond %{REQUEST_FILENAME} !-f). Но если вы этого не хотите, вместо этого перечислите те URL-адреса, для которых вы хотите, с помощью RewriteCond %{REQUEST_URI} ^/(videos/login|foo/bar|baz/quux|…)$. - person Gumbo; 10.07.2009

Это отлично работает для меня:

Переписать ^login(/|)$ /videos/login.php

person AOvejero    schedule 09.07.2009

Использование mod_rewrite

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/videos/login/?$
RewriteRule (.*) /videos/login.php [L,R=301]
person DavidWinterbottom    schedule 09.07.2009

redirect 301 /videos/login/index.html http://yoursite.com/videos/login.php

The server will change the address http://mysite.com/videos/login/ and http://mysite.com/videos/login both to http://mysite.com/videos/login/index.html, based on the configuration but this is default. Before it encounters a 404 this address is redirected to the new one. At least this works at my site.

Пришлось использовать pre, потому что сайт позволяет размещать только одну гиперссылку :/

person Ruud    schedule 09.07.2009