OK Я пробовал несколько решений, но до сих пор не могу этого добиться. поэтому мне нужно сделать
mydomain.com/search?q=product&l=london
в
mydomain.com/search/product/london
В основном я использую правила перезаписи, чтобы скрыть расширение .php, выполнив этот код
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !- RewriteRule ^([^\.]+)$ $1.php [NC,L]
Итак, теперь search.php преобразуется в поиск и когда пользователь ищет. он перенаправляет на конечную косую черту вместо строки запроса
Вот то, что я использовал до сих пор
RewriteCond %{THE_REQUEST} /search/?q=([^&]+)&l=([^\s]+) [NC] RewriteRule ^ /%1/%2? [NC,L,R] #skip the rule if the request is for dir RewriteCond %{REQUEST_FILENAME} !-d #skip the rule if the request is for file RewriteCond %{REQUEST_FILENAME} !-f #rewrite any other request to "/packagemenu.php?" RewriteRule ^([^/]+)/([^/]+)/?$ /search?q=$1&l=$2 [NC,L]
А ТАКЖЕ
RewriteBase /search/ # external redirect from actual URL to pretty one RewriteCond %{THE_REQUEST} /search(?:\.php)?\?q=([^\s&]+)&l=([^\s&]+) [NC] RewriteRule ^ search/%1/%2/? [R=302,L,NE] RewriteCond %{THE_REQUEST} /search(?:\.php)?\?q=([^\s&]+)\s [NC] RewriteRule ^ search/%1/? [R=302,L,NE] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # internal forward from pretty URL to actual one RewriteRule ^search/([^/]+)/?$ search?q=$1 [NC,L,QSA] RewriteRule ^search/([^/]+)/([^/]+)/?$ search?q=$1&l=$2 [NC,L,QSA]
Но оба они не работают. У меня не так много знаний, поэтому, пожалуйста, помогите мне.
Создайте свой корневой сайт .htaccess следующим образом:
Options -MultiViews RewriteEngine On RewriteBase /jobportal/ # To externally redirect /search.php?q=product&l=london to /search/query/london/ RewriteCond %{THE_REQUEST} /search(?:\.php)?\?q=([^\s&]+)&l=([^\s&]+)\s [NC] RewriteRule ^ search/%1/%2/? [R=301,L,NE] # To externally redirect /search.php?q=product to /search/query/ RewriteCond %{THE_REQUEST} /search(?:\.php)?\?q=([^\s&]+)\s [NC] RewriteRule ^ search/%1/? [R=301,L,NE] # To externally redirect /dir/file.php to /dir/file RewriteCond %{THE_REQUEST} \s/+(.+?)\.php\s [NC] RewriteRule ^ %1 [R=301,NE,L] # ignore all rules below for real files/directories RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # internal forward from /search/product/ to search.php?q=product RewriteRule ^search/([^/]+)/?$ search.php?q=$1 [NC,L,QSA] # internal forward from /search/product/london/ to search.php?q=product&l=london RewriteRule ^search/([^/]+)/([^/]+)/?$ search.php?q=$1&l=$2 [NC,L,QSA] # internal forward from /dir/file to /dir/file.php RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [L]
Вы можете получить URL-адрес mydomain.com/search/product/london
, используя следующее правило в своем .htaccess
.
RewriteEngine On RewriteRule ^search/([^/]*)/([^/]*)$ /search?q=$1&l=$2 [L]
Просто убедитесь, что вы очистили кеш, прежде чем тестировать это.
Попробуйте, как показано ниже,
RewriteEngine On RewriteCond %{REQUEST_URI} ^/search$ RewriteCond %{QUERY_STRING} ^q=([^\/]+)&l=([^\/]+)$ RewriteRule ^ search/%1/%2? [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d Rewriterule ^search/([^\/]+)/([^\/]+)$ search.php?q=$1&l=$2 [QSA,L]