Обрабатывать красивые запросы http для домена и поддоменов

0

Текущая активная система URL-адресов выглядит так:

http://example.com/dashboard/pages.php
http://example.com/dashboard/page.php?id=10

Поэтому я хочу, чтобы тот же URL был доступен, если вы используете:

http://example.com/dashboard/pages
http://example.com/dashboard/page/id/10

http://example.com/dashboard указывает на /var/www/html/dashboard

И снова, когда я использую субдомен, я хочу, чтобы тот же URL был доступен, если я использую:

http://subdomain.example.com/pages
http://subdomain.example.com/page/id/10

Тогда система активных URL-адресов выглядит так:

http://subdomain.example.com/pages.php
http://subdomain.example.com/page.php?id=10

http://subdomain.example.com указывает на /var/www/html/dashboard

Таким образом, корневой каталог домена и поддомена отличается от него.

И я хочу это только для файлов php. Я не хочу, чтобы это повлияло на структуру каталогов css или js так или иначе, поскольку я использую относительный путь.

Может ли кто-нибудь помочь в том, что должно быть содержимым htaccess? Я очень плохо разбираюсь в регулярных выражениях.

Теги:
.htaccess
mod-rewrite

3 ответа

1
Лучший ответ

Попробуйте добавить эти правила перезаписи в файл htaccess в корневом каталоге документа.

Options -Multiviews FollowSymLinks
RewriteEngine On

RewriteCond %{THE_REQUEST} \ /+dashboard/([^/]+)\.php(\?|\ |$)
RewriteRule ^ /dashboard/%1 [L,R=301]

RewriteCond %{THE_REQUEST} \ /+dashboard/([^/]+)\.php\?([^=]+)=([^&\ ]+)
RewriteRule ^ /dashboard/%1/%2/%3 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/dashboard/$1.php -f
RewriteRule ^dashboard/([^/]+)$ /dashboard/$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/dashboard/$1.php -f
RewriteRule ^dashboard/([^/]+)/([^/]+)/([^/]+)$ /dashboard/$1.php?$2=$3 [L,QSA]

Затем убедитесь, что все ваши относительные ссылки (например, CSS) не сломаются, потому что теперь у вас есть совершенно другая относительная база URL-адресов, добавьте это в заголовок своих страниц:

<base href="/dashboard/" />

Или независимо от того, какая база должна быть.

  • 0
    Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Обратитесь к администратору сервера по адресу [адрес не указан], чтобы сообщить им о времени возникновения этой ошибки и действиях, которые вы выполнили непосредственно перед этой ошибкой. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера.
  • 0
    @SazzadHossainKhan у меня все норм работают нормально, разве у вас не включен mod_rewrite?
Показать ещё 9 комментариев
1

попробуй это

для htaccess:

AddDefaultCharset UTF-8
Options -Indexes

RewriteEngine on

# Usually it RewriteBase is just '/', but 
# replace it with your subdirectory path
# For root domain following line
RewriteBase /
# For sub directory following line
RewriteRule ^/?([-a-zA-Z0-9_+]+)/?([-a-zA-Z0-9_+]+)/?([0-9]+)/?$  $1.php?$2=$3 [L]

для make url в php

$re = "/\\.php\\??|=/m";
$str = "http://example.com/dashboard/pages.php\nhttp://example.com/dashboard/page.php?id=10";
$subst = "/";

$result = preg_replace($re, $subst, $str);

вывод:

http://example.com/dashboard/pages/ 
http://example.com/dashboard/page/id/10

живая демонстрация

  • 0
    Мне нужен код htaccess
  • 0
    @ Саззад Хоссейн Хан, я обновил свой ответ .
0

Это сделает работу,

substr(strrchr(rtrim($url, '/'), '/'), 1)

Он отобразит номер страницы, т.е. 10.

Также это поможет вам,

$url='http://example.com/dashboard/page/id/10';

if(preg_match("/\/(\d+)$/",$url,$matches))
{
  $end=$matches[1];
}

Вывод для обоих кодов будет:

10

Вот моя попытка с помощью онлайн-инструмента,

Изображение 174551

  • 0
    Мне нужен код htaccess
  • 0
    Хорошо, тогда извините @SazzadHossainKhan Я неправильно понял ваш вопрос. Но, возможно, вы уже получили ответ.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню