мод переписать htaccess - PullRequest
       6

мод переписать htaccess

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

Я пытаюсь выполнить следующее переписывание: URL, stenenkermis.be или www.stenenkermis.be приведут к www.stenenkermis.be/2012/v1/

www.stenenkermis.be/2012/v1/page/param/param/ необходимо получитьв www.stenenkermis.be/2012/page.php?param1=&param2= (но параметры являются дополнительными, пользователь также может перейти к дому / без параметров)

В настоящее время это мой файл htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^stenenkermis\.be$
RewriteRule (.*) http://www.stenenkermis.be/$1 [R=301,L]
RewriteRule ^$ /2012/v1/ [L,R=301]
RewriteRule ^2012/v1/([^/]+)/ /2012/$1.php [NC,R]
RewriteRule ^2012/v1/([^/]+)/([^/]+)/([^/]+) /2012/$1.php?arg1=$2&arg2=$3 [NC,R]
RewriteRule ^2012/v1/([^/]+)/([^/]+)/([^/]+) /2012/$1.php?arg1=$2&arg2=$3 [NC,R]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?stenenkermis.be/.*$ [NC]
RewriteRule \.(gif|jpe?g|png)$ - [F]

единственная проблема заключается в том, что мой URLперенаправляется на http://www.stenenkermis.be/2012/page.php?param1=&param?= в адресной строке, я не хочу, чтобы пользователь видел это.

Кто-нибудь может мне помочь с выяснением этого htaccess?

Ответы [ 2 ]

3 голосов
/ 18 декабря 2011

Не используйте R в своих флагах перезаписи, так как это означает, что mod_rewrite получает указание отправить HTTP-перенаправление пользователю. Вместо этого используйте QSA.

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

Fge прав, но ваши правила, кажется, в неправильном порядке .

Основное правило: всегда начинайте с самого сложного, переходите к менее сложному.

И, конечно, добавьте QSA вместо R в нужных местах:

В качестве предложения я добавил все статические файлы (это мое правило в моей среде prod):

Таким образом:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^stenenkermis\.be$
RewriteRule (.*) http://www.stenenkermis.be/$1 [R=301,L]
# Rewrite, but **keep on** with modified URL:
RewriteRule ^$ /2012/v1/ [NC,QSA]
RewriteRule ^2012/v1/([^/]+)/([^/]+)/([^/]+) /2012/$1.php?arg1=$2&arg2=$3 [NC,QSA,L]
RewriteRule ^2012/v1/([^/]+)/([^/]+) /2012/$1.php?arg1=$2 [NC,QSA,L]
RewriteRule ^2012/v1/([^/]+)/ /2012/$1.php [NC,QSA,L]

# operate with static files: forbid if not coming for original website:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?stenenkermis.be/.*$ [NC]
RewriteRule (.*)(\.(css|js|htc|pdf|jpg|jpeg|gif|png|ico))$ - [NC,F]

А теперь две подсказки:

Пожалуйста, попробуйте использовать директиву 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)!)

...