Я пытаюсь использовать красивые URL-адреса на своем сайте, и я не слишком много знаю о htaccess, но после некоторого поиска я получил следующее:
RewriteEngine On
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ content.php?action=$1&id=$2 [NC]
Я пытаюсь изменить это:
mysite.com/cms/content.php?action=content&ID = 80
в:
mysite.com/cms/content/80
Но почему-то это не работает, и я получаю пустой экран и ошибку 404,
Failed to load resource: the server responded with a status of 404 (Not Found) --in-- /cms/files/plugin/tinymce/tinymce.min.js
Об ошибке 404: он должен загрузить файл .js из mystie.com/files/plugin/tinymce/tinymce.min.js — не — mystie.com/cms/files/plugin/tinymce/tinymce.min.js
Мой файл htaccess находится в корневой папке. Я делаю что-то неправильно?
Я думаю, что сервер не прочитал мой файл .htaccess. Как мне выяснить проблему?
Вы должны поместить это правило в /cms/.htaccess
:
RewriteEngine On
RewriteBase /cms/
RewriteRule ^([a-z]+)/([0-9]+)/?$ content.php?action=$1&id=$2 [NC,L,QSA]
Затем вам нужно добавить это в <head>
раздел HTML вашей страницы: <base href="/" />
так что каждый относительный URL разрешается из этого URL, а не относительного URL текущей страницы.
RewriteEngine On
RewriteRule ^/cms/([a-z]+)/([0-9]+)$ content.php?action=$1&id=$2 [NC]
Удалить побеги \
Вы должны обязательно включить подпапку, если ваш htaccess находится в корне.
Попробуйте это правило.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cms/([a-z]+)/([0-9]+)/?$ /cms/content.php?action=$1&id=$2 [NC,L]
Также пустой экран обычно означает ошибку PHP.
У тебя есть /cms/
в вашем URL до остального, поэтому вам нужно изменить RewriteRule
что-то вроде этого:
RewriteRule ^cms/([a-z]+)\/([0-9]+)\/?$ content.php?action=$1&id=$2 [NC]
Кроме того, я надеюсь, что вы знаете, что .htaccess не может работать на некоторых серверах (например, Nginx или несколько пользовательских), и даже на апаш серверы могут быть mod_rewrite
отключен.
Я предполагаю, что ваши скрипты и стили связаны с помощью относительных URL. Потому что старый URL /cms/content.php
база URI /cms/
и все ваши относительные ссылки разрешены /cms/
Я полагаю, что вы хотите.
Однако, когда вы меняете свои ссылки на /cms/content/1234
база URI становится /cms/content/
и все относительные ссылки будут использовать это в качестве своей базы, и, поскольку «контент» даже не является реальной папкой, все эти ссылки будут 404, и вы не будете загружать ни один из ваших CSS-контента или скриптов.
Измените ссылки на абсолютные URL-адреса или укажите базу URI в заголовке ваших страниц (внутри <head> </head>
теги):
<base href="/cms/" />