2013-10-03 4 views
2

Я пытаюсь создать поддельные каталоги для перенаправления конкретных параметров для конкретных подкаталогов, например:Mod Rewrite Htaccess для фальшивых каталогов

From: www.example.com/username 
    To: www.example.com/posts?uid=alex 

From: www.example.com/p/1234 
    To: www.example.com/posts?url=1234 

Это как-то более сложный пример, от остальных вопросов с той же темой на StackOverflow и большинство ответов не дают объяснений, как это работает, поэтому я не могу прийти к выводу о том, как я могу это решить.

+0

Вы на самом деле ищет 'Front Controller' (который включает в себя маршрутизацию и диспетчеризация). – Yang

ответ

3

Try:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^p/([^/]+)$ /posts?url=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ /posts?uid=$1 [L] 

Во-первых, вам нужно сделать все ссылки выглядеть следующим образом:

www.example.com/username 
www.example.com/p/1234 

правила перезаписи выше будет соответствовать /p/1234 (через ^p/([^/]+)$) и /username (через ^([^/]+)$) и внутренне переписать их на URI /posts. Обратите внимание, что это будет не изменить URL-адрес в строке местоположения браузера, так как это внешнее перенаправление. Если кто-то войдет в www.example.com/posts?uid=alex, URL-адрес останется без изменений.

+0

А это, похоже, не работает, потому что в моем фактическом файле posts.php я получаю параметр с javascript и отправляю его в api как таковой: http://pastebin.com/CckMbbrg, который ничего не записывает. – ATs

+0

@ATs, если вы получаете параметры с помощью javascript, тогда просто делайте все фальшивые файлы с помощью javascript, вам не нужна мода-переписывание вообще –

+0

ах, как это можно достичь? – jQuerybeast

1

Включить mod_rewrite и .htaccess через httpd.conf, а затем поместить этот код в файле DOCUMENT_ROOT/.htaccess:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^p/([^/]+)/?$ /posts?url=$1 [L,QSA,NC] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/?$ /posts?uid=$1 [L,QSA,NC]