Проблемы с mod_rewrite: URL все еще показывает переменные php в URL - PullRequest
0 голосов
/ 19 апреля 2011

Я работал с mod_rewrite и, похоже, не могу заставить URL отображаться красиво, все еще показывая переменные php в URL.

Это текущий htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^/display/([^/]+)$/([^/]+)\$ http://www.mydomain.tld/display.php?photo_id=$1&photo_size=$2 [NC]

По сути, я попробовал все, чтобы получить чистый URL, как показано ниже: http://www.mydomain.tld/display/3456/large

Ответы [ 3 ]

0 голосов
/ 19 апреля 2011

хорошо, перезапись работает, если вы вводите URL-адрес в браузер ... поэтому mod_rewrite выполняет свою работу, но не перезаписывает URL-адрес при доступе с помощью переменных:

http://www.domain.tld/display.php?photo_id=2304&photo_size=Large (без перезаписи) http://www.domain.tld/display/2304/Large (работает при вводе)

Я что-то упустил где-то?

Используя информацию снизу, все еще не перенаправляю, не уверен, еслиУ меня где-то неправильный код или если что-то с mod_rewrite сломано, возможно, внутри apache.

0 голосов
/ 19 апреля 2011

В вашем правиле перезаписи сказано, что вы переписываете http://www.domain.tld/display/2304/Large в http://www.domain.tld/display.php?photo_id=2304&photo_size=Large (то есть первое хранится на втором месте)

Если вы хотите, чтобы пользователь с типом http://www.domain.tld/display.php?photo_id=2304&photo_size=Large был перенаправлен на http://www.domain.tld/display/2304/Largeвам нужно:

RewriteCond %{QUERY_STRING} ^photo_id=([0-9]+)&photo_size=(.*)$
RewriteRule display.php /display/%1/%2 [R,L] #R to redirect, and then change the URL in the browser

и вам нужно добавить что-то вроде

RewriteCond %{REDIRECT_URL} !^display.php$
RewriteRule ^/display/([^/]+)/([^/]+)$ display.php?photo_id=$1&photo_size=$2

Чтобы избежать бесконечных циклов.

0 голосов
/ 19 апреля 2011

Не знаю, если это действительно проблема, но, похоже, обратный слеш и знак доллара слишком много

^/display/([^/]+)$/([^/]+)\$
                 |        |

^/display/([^/]+)/([^/]+)$
...