Переписать URL с помощью PHP - PullRequest
1 голос
/ 24 декабря 2011

Ниже приведена структура папок моего проекта PHP

PHPProject (Root)
-->Admin/
-->Config/
-->File1.php
-->File2.php
--> ..
--> ..
-->.htaccess
-->File10.php

Я хотел бы включить RewriteURL для проекта, к которому можно получить доступ следующим образом.

Правило 1: Мой домен всегда должен быть доступен с www.mydomain.com.Если кто-то попытается получить доступ как http://mydomain.com, мне придется переписать URL-адрес на http://www.mydomain.com.Для которого я использую следующее правило в своем htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#RewriteCond %{HTTP_HOST} !^www\.mydomain\.com [NC]
#RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]
</IfModule>

Правило 2: Я хотел бы иметь конкретный URL, который указывает на страницу:

http://www.mydomain.com/username переписать в http://www.mydomain.com/file4.php?name=username

Правило 3:

Я могу получить первое правило для правильной работы с вышеуказанной информацией в файле .htaccess, нопроблема в том, что я должен жестко закодировать доменное имя на нем.Можно ли указать универсальный (regex), чтобы правило распространялось на несколько доменов?

Вопрос: Мне нужна помощь, чтобы объединить правило 1 + правило 2 + правило 3 в целом как правилав моем файле .htaccess.

Может кто-нибудь, пожалуйста, помогите мне достичь этого.

Ответы [ 2 ]

1 голос
/ 24 декабря 2011

Правило 1:

RewriteCond %{HTTP_HOST} !^www\.(domain1|domain2|domain3|domain4)\.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

или

RewriteCond %{HTTP_HOST} !^www\.domain1\.com [NC]
RewriteCond %{HTTP_HOST} !^www\.domain2\.com [NC]
RewriteCond %{HTTP_HOST} !^www\.domain3\.com [NC]
RewriteCond %{HTTP_HOST} !^www\.domain4\.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

Правило 2

http://www.mydomain.com/username

до

http://www.mydomain.com/file4.php?name=username

RewriteRule ^username$ /file4.php?name=username [QSA,NC,L]

и если вы хотите сделать его общим (с буквенно-цифровыми символами):

RewriteRule ^([a-z0-9]+)$ /file4.php?name=$1 [QSA,NC,L]

Правило 3

Соберите все вместе:

RewriteCond %{HTTP_HOST} !^www\.(domain1|domain2|domain3|domain4)\.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

RewriteRule ^([a-z0-9]+)$ /file4.php?name=$1 [QSA,NC,L]

Надеюсь, это поможет.

Два совета:

Пожалуйста, попробуйте использовать директиву RewriteLog: она поможет вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

0 голосов
/ 24 декабря 2011

Если вам нужно только для http, это должно сделать.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST}!^(www\.¦$) [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

И, В остальном вы можете использовать Front Controller Pattern.

[Идея Front Controller Pattern перенаправляет все ваши запросы в php-файл и принимает решение оттуда]

Следуйте следующим URL-адресам, и если у вас возникнут вопросы, вы можете их задать:)

http://www.phppatterns.com/docs/design/the_front_controller_and_php

http://onlamp.com/pub/a/php/2004/07/08/front_controller.html?page=2

...