Я работал с 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
хорошо, перезапись работает, если вы вводите 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.
В вашем правиле перезаписи сказано, что вы переписываете http://www.domain.tld/display/2304/Large в http://www.domain.tld/display.php?photo_id=2304&photo_size=Large (то есть первое хранится на втором месте)
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
Чтобы избежать бесконечных циклов.
Не знаю, если это действительно проблема, но, похоже, обратный слеш и знак доллара слишком много
^/display/([^/]+)$/([^/]+)\$ | | ^/display/([^/]+)/([^/]+)$