Мой сайт имеет путь к библиотеке / каталогу, например:
{Корень} / страницы / {файлы} .php
Мой путь index.php следующий: {root} /index.php
Я хочу, чтобы, когда люди переходили (в качестве примера) к «login.php» (который существует в каталоге / pages.), URL-адрес не содержит «/ pages».
Так:
www.website.com/pages/dashboard.php
Перенаправляет на
wwww.website.com/dashboard.php
И возможно, что когда люди заходят на сайт www.website.com/dashboard.php, они могут получить доступ к этой странице.
Извините за плохое объяснение, не могу найти хорошие слова для этого.
Редактировать: это мой .htacces сейчас
RewriteEngine on
# Rewrite automatic to /index.
RewriteCond %{REQUEST_URI} ^/$
# Second check for if above doesn't do the job [www/https].
RewriteCond %{REQUEST_URI} !^/index [NC]
RewriteRule ^$ /index [R=301,L]
# Delete all the .php and .html extensions from files [url-related].
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
# Prevent people for looking inside the .htacces file.
<Files .htaccess>
order allow,deny
deny from all
</Files>
И я попробовал это:
RewriteRule ^ /? Pages /(.*)$ / $ 1 [R = 301, L]
(Который меня перенаправил, но все равно получил ошибку 404.
Я сомневаюсь, что вы можете сделать это только с .htaccess. (РЕДАКТИРОВАТЬ: вы можете, см. «РЕДАКТИРОВАТЬ» ниже)
То, что вы хотите, это ПРИНЯТЬ, что login.php были в корневом каталоге, но на самом деле это не так.
РЕДАКТИРОВАТЬ: Я думаю, что я перепутал это. Вы можете сделать это только с .htaccess-файлом. Но я не рекомендую это. Вам придется добавить все перенаправления на руку (или разработать выражения для разных случаев).
Вместо этого я предлагаю использовать следующую технику. Это в основном начало самодельной системы управления контентом, где пользователь может самостоятельно создавать страницы и называть URL, ведущий к этой странице. Кроме того, все это можно распространить на сайт, поддерживающий ajax, чтобы быть действительно актуальным!
Если вы не заинтересованы в названных преимуществах метода контроллера, замените код в вашем .htaccess-файле, и ваша проблема входа на страницу будет решена.
RewriteEngine on
#catch www.example.com/login.php and redirect without user's conciousness to www.example.com/pages/login.php
RewriteRule ^(login.php)$ http://www.example.com/pages/login.php [NC,L,QSA]
# Prevent people from looking inside the .htacces file.
<Files .htaccess>
order allow,deny
deny from all
</Files>
Если вы хотите получить больше (и на самом деле полезно) знаний и хотите изучить универсальную технику запуска CMS с названными преимуществами, продолжайте читать!
Когда пользователь вызывает URL «www.example.com/login», будет загружена страница входа («login.php»).
Вам нужен .htaccess-файл в корневом каталоге.
Вам нужен «контроллер» в корневом каталоге (я предлагаю index.php).
Вам нужны где-то страницы с контентом, в этом примере это файл с именем «login.php» в root / pages.
Htaccess перенаправляет все URL-адреса на этот контроллер, а также передает URL-адрес, первоначально вызванный пользователем. На основе переданного URL контроллер решает, какой контент страницы загрузить. В нашем случае это будет login.php.
путь: корень / index.php
<?php
function callPage($data) {
if (isset($data['path'])) {
// get the correct file for the given path
switch ($data['path']) {
case "login":
include("/pages/login.php");
break;
default:
// show 404 error if given path is unknown
include("/pages/error.php");
}
}
}
?>
<html>
<head></head>
<body>
<div id="page"><?php callPage($_GET); ?><!-- load called page's content --></div>
</body>
</html>
путь: root / pages / login.php
<p>I am a happy login page. See, that I don't need any HTML Tags, a body or a head, because I am meant to be used only when mother index.php calls me up and integrates me. Life's so easy!</p>
<p>And do you know what's the best? I can even run PHP inside myself! Awesome, isn't it?</p>
путь: корень / .htaccess
RewriteEngine on
#if called file or directory reallyexists, don't redirect (might lead into a loop)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#redirect every URL (that does not really exist) to index.php
#the URL the user called can be accessed in index.php in $_GET['path']
RewriteRule ^(.*)$ http://www.exampe.com/index.php?path=$1 [NC,L,QSA]
# Prevent people from looking inside the .htacces file.
<Files .htaccess>
order allow,deny
deny from all
</Files>
Это, конечно, очень простой пример. В настоящее время нет преимущества в использовании этого метода вместо простого перенаправления в .htaccess-файле, а есть только недостатки. Но теперь вы сами можете его улучшить. Некоторые возможности:
В конце концов, это приводит к небольшой системе, которая может быть расширена до собственной CMS
Других решений пока нет …