Прочитав ваш комментарий, разъясняющий структуру вашей папки, я исправил 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-адрес на страницу веб-сайта, это то, что я написал в своем первом ответе.