Красивые URL-адреса с механизмом перезаписи .htaccess

Эй,

Я пытаюсь добиться красивых URL-адресов для своего сайта с помощью механизма перезаписи. Цель такая: mysite.dk/da, mysite.dk/da/success и mysite.dk/da#scroll.

Пока что мой файл htaccess выглядит так:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
DirectoryIndex /index.php

Я пытался реализовать это

RewriteRule ^da$ da.php [L]
RewriteRule ^da/success$ success.php [L]

но это не особо помогло :/ Спасибо

da = dansk = датский

Adam 25.09.2023 20:26
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
1
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы получить желаемые красивые URL-адреса, измените файл .htaccess следующим образом:

RewriteEngine on

# Specific rewrites
RewriteRule ^da$ da.php [L]
RewriteRule ^da/success$ success.php [L]

# General rewrites
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

# Default index
DirectoryIndex index.php
  1. Разместите конкретные правила для da и da/success вверху, чтобы они имели приоритет.
  2. Используйте [L], чтобы прекратить дальнейшее переписывание в этих конкретных случаях.
  3. Общие правила следуют после конкретных.

ну, но затем он ведет меня в репозиторий «da», и чтобы войти на одну страницу «da.php», мне нужно добавить .php, чтобы все заработало, верно? Я заметил, что эти правила в некотором роде пересекаются, поэтому я до сих пор не понимаю, как заставить их работать, но, похоже, это своего рода стандарт для каждого многоязычного сайта, так что это не должно быть так сложно...

Adam 25.09.2023 19:22

Правило RewriteRule ^da$ da.php [L] перезапишет URL-адреса, заканчивающиеся на /da, на da.php.. Флаг [L] остановит дальнейшее перезапись, поэтому у вас не возникнет проблема с добавлением .php к этому конкретному URL-адресу.

ЯДPTГФИ 25.09.2023 19:27

Хорошо, я это вижу, но по какой-то причине у меня все еще есть список содержимого этого каталога, когда я ввожу URL-адрес mysite.dk/da, и для доступа к нужному сайту мне все равно нужно добавить .php, например mysite.dk/da.php:/ /не знаю, как публиковать скриншоты в комментариях

Adam 25.09.2023 20:29
Ответ принят как подходящий

Сделайте это так:

# Default index
DirectoryIndex index.php

# disable directory listing and MultiViews
Options +FollowSymLinks -MultiViews -Indexes

# disable automatic addition of trailing / after a directory
DirectorySlash Off

RewriteEngine on

# add .php extension 
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

Это тоже не работает должным образом :/

Adam 27.09.2023 10:07

Мои извинения. Что ж, мне нужно добавить .php к целевой странице da.php, а также /da/succes.php (по-датски это успех с одним s, я не повторяю это написание снова и снова xD), и избегать их было своего рода суть этой борьбы. Есть ли у вас еще какие-нибудь советы? :)

Adam 27.09.2023 19:41

Потому что я хотел иметь красивый URL-адрес без добавления .php... точно так же, как mysite.dk/home вместо mysite.dk/home.php. Видишь? :)

Adam 27.09.2023 21:41

ок, в каком каталоге находится этот .htaccess и какое значение DOCUMENT_ROOT?

anubhava 27.09.2023 21:56

.htaccess находится на самом верху всех каталогов, индексов и других файлов, таких как robots.txt и т. д. Я просмотрел все файлы конфигурации Apache и не нашел ничего, связанного с DOCUMENT_ROOT, и у меня нет файла конфигурации, содержащего этот файл. Я считаю :(

Adam 28.09.2023 10:04

ок, можешь попробовать мой обновленный ответ сейчас

anubhava 28.09.2023 12:03

Замечательно, это почти идеально! Прямо сейчас мне все еще нужно добавить .php после успеха, чтобы он работал, так что это так - mysite.dk/da/succes.php, было бы здорово, если бы мы могли заставить его работать как mysite.dk/da/succes :)) Я предполагаю, что это строка кода «RewriteRule ^da/succes$ succes.php [L,NC]». Мне любопытно, каков стандарт для этого, если бы в репозитории «da» было больше страниц, как заставить их все работать таким образом, не создавая правило перезаписи для каждой из них? :) Спасибо, пока

Adam 28.09.2023 12:35

На самом деле вам не нужны никакие правила в строке # Specific rewrites. Я удалил его. Можете ли вы повторить тестирование с моим обновленным кодом .htaccess?

anubhava 28.09.2023 12:37

Другие вопросы по теме