.htaccess: перенаправить конкретную ссылку на другую? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть три ссылки:

localhost/my_projects/my_website.php
localhost/my_projects/my_website.html
localhost/my_projects/my_website

Пути к файлам php и html следующие:

C:\xampp\htdocs\my_projects\my_website.php
C:\xampp\htdocs\my_projects\my_website.html

Ссылка без расширения является "искусственной", и я хочу использовать указанную ссылку:

localhost/my_projects/my_website

чтобы получить содержимое одной из следующих ссылок:

localhost/my_projects/my_website.php
localhost/my_projects/my_website.html

Причина, по которой два примера файла, а не только один, заключается в том, что я хочу иметь возможность переключаться между этими двумя файлами при редактировании файла htaccess. Очевидно, я хочу получить доступ только к одному из этих файлов одновременно.

Что мне нужно иметь в моем файле .htaccess внутри папки my_projects для этого? Как я могу перенаправить одну конкретную ссылку на другую конкретную ссылку?

1 Ответ

0 голосов
/ 12 сентября 2018

Прочитав ваш комментарий, разъясняющий структуру вашей папки, я исправил RewriteRule. (Кстати, было бы лучше, если бы вы добавили эту информацию в вопрос, а не в комментарии).

URL, на который вы хотите настроить таргетинг: http://localhost/my_projects/my_website

http:// это протокол
localhost - это ваш домен (это также может быть 127.0.0.1 или доменное имя типа www.example.com в Интернете)

Я предполагаю, что вы используете Apache на порту 80, в противном случае в URL-адресе вам также необходимо указать порт. Например, для порта 8086 это будет http://localhost:8086/my_projects/my_website.

Реальный путь - htdocs/my_projects/my_website.php или htdocs/my_projects/my_website.html в зависимости от ваших потребностей (очевидно, оба не будут работать одновременно).

Здесь my_projects в «поддельном» URL-адресе сталкивается с реальной папкой "my_projects", поэтому Apache перейдет к папке и увидит, что там нет документа my_website (без расширения) (он не достигнет перезаписи) правила).

В SO есть вопрос, который обеспечивает обходной путь для этого, но это не идеальное решение, у него есть крайние случаи, когда URL-адрес по-прежнему не работает или другие URL-адреса выходят из строя. Я отправил это вчера, но, кажется, сейчас не могу его найти.

Простое решение, если у вас есть возможность сделать это, состоит в том, чтобы изменить «поддельный» URL, чтобы он не сталкивался с реальным путем.

Одним из вариантов является, например, замена подчеркивания дефисами. Тогда вы получите доступ к странице как http://localhost/my-projects/my-website, если хотите сохранить в URL своего рода «поддельную» структуру папок. В противном случае вы можете просто использовать http://localhost/my-website.

Вот обе альтернативы:

# This is for the directory not to be shown. You can remove it if you don't mind that happening.
Options -Indexes

RewriteEngine On

#Rule for http://localhost/my-projects/my-website
RewriteRule ^my-projects/my-website(.+)?$ my_projects/my_website.php$1 [NC,L]

#Rule for http://localhost/my-website
RewriteRule ^my-website(.+)?$ my_projects/my_website.php$1 [NC,L]

(Не используйте оба, просто выберите один из этих двух или используйте их, чтобы адаптировать его к вашим потребностям)

Первая часть правила перезаписи - это регулярное выражение для вашего «поддельного» URL, вторая часть - это относительный путь вашей реальной структуры папок до страницы, которую вы хотите показать.

В регулярном выражении мы фиксируем все возможные параметры запроса после .../my_website и вставляем его после my_website.php во вторую часть правила ($1).

Позже, если вы хотите указать URL-адрес на my_website.html, вам нужно изменить вторую часть правила, где написано .php, заменить ее на .html.

Кстати, это совершенно правильно, и вы увидите на большинстве SEO дружественных веб-сайтах запись URL-адреса как http://www.somesite.com/some-page-locator и правило перезаписи, которое переводит этот URL-адрес на страницу веб-сайта, это то, что я написал в своем первом ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...