2016-12-26 2 views
0

На самом деле у меня есть эта проблема:.htaccess RewriteRule в путь без изменения URL в Smarty (PHP)

адрес, который приходит на внутренней странице, как
http://example.co.in/page.php?id=2

Что я хочу на самом деле, как
http://example.co.in/AboutUs

можно ли с помощью только .htaccess? Мой .htaccess код приведен чуть ниже, но это дает выход как этого
http://example.co.in/page/2

Options -MultiViews 
RewriteEngine On 

RewriteCond %{THE_REQUEST} \s/page\.php\?id=([0-9]+)\s [NC] 
RewriteRule^/page/%1? [R=301,L] 

RewriteRule ^page/([0-9]+)$ /page.php?id=$1 [L] 

Я пробовал много, но не получить успех!

+0

Не использовать правило для каждой страницы, просто переписать все запросы без файлов в 'index.php', затем посмотреть на пути часть URL в простом массиве, чтобы включить страниц по ID. Это называется маршрутизация. – Walf

+0

Hii @Walf! На самом деле я не могу использовать маршрутизацию в нем, и я должен сделать это только для двух страниц, так что можно ли манипулировать/переписывать url только с помощью .htaccess? – Roshan

+0

Вы не можете добавить 5 строк PHP? Даже в новом файле? – Walf

ответ

0

Вам понадобится правило для каждой страницы. Вот один, чтобы вы начали на основе вашего примера:

/ABOUTUS

Options -MultiViews 
RewriteEngine On 

RewriteRule ^AboutUs$ page.php?id=2 [QSA] 

Это сохранит любую строку запроса, которая может быть использована, добавляющие id=2. Это внутреннее переписывание, поэтому посещение AboutUs действительно послужит page.php?id=2, которое звучит так, как вы хотите. Добавьте одну страницу RewriteRule для каждой страницы. Он должен зайти в файл .htaccess в соответствии с запросом.

/page.php?id=2

Если вы хотите, чтобы остановить page.php?id=2 от работы, и он перенаправлять AboutUs, добавьте этот набор из двух директив для каждой страницы.

RewriteCond %{QUERY_STRING} (^|&)id=2(&|$) [NC] 
RewriteRule ^page\.php$ AboutUs? [R=301,L] 

будет переадресовано с дополнительными параметрами строки запроса, но вся строка запроса отбрасывается и не передается далее (? после AboutUs).

Примечание

Очевидно изменить соответствующие части для каждой страницы вы создаете правила (число идентификаторов и часть ABOUTUS), но оставить остальные части точно так, как они для каждого из них.

+0

Hii @ user2493235 - я попробовал ваш код в первом тайме, но все равно получаю URL-адрес, например 'http: //example.co.in/page.php? Id = 2' – Roshan

+0

Первый тайм будет делать только работу'/AboutUs'. Вам понадобится вторая половина для перенаправления из '/page.php? Id = 2' в'/AboutUs'. – SuperDuperApps

0

Hiii, все! Спасибо всем за вашу поддержку и предложения.
Ниже приведены коды, которые работают для меня, что я точно хочу. Надеюсь, что это поможет любому, если понадобится.

# Tell PHP that the mod_rewrite module is ENABLED. 
SetEnv HTTP_MOD_REWRITE On 
RewriteEngine on 
RewriteBase/

#FOR INTERNAL PAGES(rewrite "/page.php?name=about us" to "AboutUs") 

RewriteCond %{QUERY_STRING} ^name=([^&\s]+)$ 
RewriteRule ^(?:page\.php|)$ /%1? [R=301,L] 

RewriteCond %{QUERY_STRING} ^name=([^&\s]+)&name=([^&\s]+)$ 
RewriteRule ^(?:page\.php|)$ /%1/%2? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\s\/]+)/?$ page.php?name=$1&r [L,QSA] 

Смежные вопросы