2015-05-18 3 views
1

Я пытаюсь удалить ключи от моего URL.htaccess удалить имя параметра из url

Таким образом, https://www.website.com/?page=gallery станет https://www.website.com/gallery.

И если &action там должно быть как https://www.website.com/?page=gallery&action=view в https://www.website.com/gallery/view.

Конечно, gallery и view являются динамическими - они определяют, какую страницу загружает мой сайт.

Я пробовал весь день, но безрезультатно. Может ли кто-нибудь из вас помочь мне здесь?

Мой текущий .htaccess:

Order Allow,Deny 
Allow from <MYIP> 

ErrorDocument 403 /message.html 

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

#Hide index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?$1 [L,QSA] 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC] 
RewriteRule^%1 [R=301,L] 


#Force www and https: 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com [NC] 
RewriteRule ^(.*)$ https://www.website.com/$1 [L,R=301,NC] 

#Gzip 
<ifmodule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript text/javascript 
</ifmodule> 
#End Gzip 

Options -Indexes 

ответ

1

Дайте следующую попытку (чуть выше вашего GZIP раздела):

# Step 1: Redirect query-based URL to new one 

RewriteCond %{QUERY_STRING} ^page=([^&\s]+)$ 
RewriteRule ^(?:index\.php|)$ /%1? [R=301,L] 

RewriteCond %{QUERY_STRING} ^page=([^&\s]+)&action=([^&\s]+)$ 
RewriteRule ^(?:index\.php|)$ /%1/%2? [R=301,L] 

# Step 2: Rewrite new URIs to query-based one 
# 
# Note how a dummy &r is used in the destination - this is 
# to prevent infinite loops 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\s\/]+)/?$ index.php?page=$1&r [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\s\/]+)/([^\s\/]+)/?$ index.php?page=$1&action=$2&r [L,QSA] 
+0

Спасибо, человек, это сработало. :) Только одна последняя часть, которая может потребоваться для фиксации, - это действие & action = it load page? Page = page & action = ACTION. Однако он работает почти отлично! этот материал запутан, но мне это очень нравится. Любые идеи о том, что делать дальше? –

+0

Добро пожаловать. Это не должно делаться вообще, из-за вопросительного знака после '% 2', который отменяет строку запроса. Возможно, попробуйте очистить кеш? –

+0

Я не уверен, он делает это даже после того, как я очистил кеш. –

0

Вы можете попробовать использовать условие QUERY_STRING - возможно, что-то вроде этого:

RewriteCond %{QUERY_STRING} ^page=(.*)$ 
RewriteRule ^(.*)$ /%1/ [R=301,L] 

RewriteCond %{QUERY_STRING} ^page=(.*)&action=(.*)$ 
RewriteRule ^(.*)$ /%1/%2/ [R=301,L] 
0

Не проверял, но на основе того, что вы просите что-то как это должно быть у вас:

RewriteEngine on 
# to convert from folders request query string index handler 
RewriteRule ^/([^/\.]+)(/([^/\.]+))/?$ index.php?page=$1&action=$3 [L] 
# or reverse from query string to folder paths (more limited/confining) 
RewriteRule ^/?(page=([^&]+)(&action=([^&]+)(&?(.*))$ /$2/$4?$6 [L] 
+0

'mod_rewrite' не поддерживает строки запроса в правилах. Перед публикацией ответов прочитайте документацию. –

0

Попробуйте добавить это низкая сила правило WWW:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/(?:index\.php|)\?page=([^&\ ]+) 
RewriteRule^/%1? [L,R] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /?page=$1 [L,QSA] 
+0

Это работает до сих пор. https://www.website.com/gallery/?page=gallery - результат –

+0

@AustinWilley вы уверены, что добавили '?' в конце цели правила? –

Смежные вопросы