Переписывание URL-адреса в php с несколькими переменными строки запроса с использованием .htacces

У меня есть динамические страницы в php, например:

http://www.example.com/page.php?tokenid=1&tokenname=About Us

Я хочу удалить эту часть:

.php?tokenid=1&tokenname=About Us

расширение страницы со строкой запроса и показать URL как:

http://www.example.com/About Us

Обновление:

Что я пробовал до сих пор:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME}.php -f
    #RewriteRule ^([a-zA-Z0-9\._-]*)?/(.*)$ $1.php [QSA,E=PATH_INFO:/$2,L]
    RewriteRule ^([a-zA-Z0-9\._-]*)?/(.*)$ $1.php/$2 [QSA,E=PATH_INFO:/$2,L]
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.*)$ $1.php [QSA,L]

    # Fix PHP Authentication with FastCGI mode
    RewriteCond %{HTTP:Authorization} !''
    RewriteRule .*php - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

person Shrish Pulkit    schedule 31.12.2016    source источник
comment
Вы пробовали что-нибудь?   -  person EhsanT    schedule 31.12.2016
comment
@EhsanT да, я много чего перепробовал в Google, но не смог найти подходящего решения.   -  person Shrish Pulkit    schedule 31.12.2016
comment
Поэтому, если вы что-то пробовали, когда вы публикуете свой вопрос, пожалуйста, включите свой код (что бы вы ни пробовали)   -  person EhsanT    schedule 31.12.2016
comment
@EhsanT я пробовал этот код:   -  person Shrish Pulkit    schedule 31.12.2016
comment
@EhsanT я пробовал этот код: ‹IfModule mod_rewrite.c› RewriteEngine на RewriteBase / RewriteCond %{REQUEST_FILENAME}.php -f #RewriteRule ^([a-zA-Z0-9\._-]*)?/(. *)$ $1.php [QSA,E=PATH_INFO:/$2,L] RewriteRule ^([a-zA-Z0-9\._-]*)?/(.*)$ $1.php/$2 [QSA ,E=PATH_INFO:/$2,L] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [QSA,L] # Исправление аутентификации PHP в режиме FastCGI RewriteCond %{HTTP:Authorization} !' ' RewriteRule .*php - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] ‹/IfModule›   -  person Shrish Pulkit    schedule 31.12.2016
comment
Вы можете получить некоторые идеи из этого ответа. Но ваш вопрос каким-то образом вводил в заблуждение, и именно поэтому ответ, предоставленный @sepehr, не решил вашу проблему.   -  person EhsanT    schedule 01.01.2017


Ответы (1)


Попробуйте это в вашем файле .htaccess:

RewriteEngine on
RewriteBase /

# Skip actual files/directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# If the host matches example.com
RewriteCond %{HTTP_HOST} ^www\.example\.com$
# And the request URI starts with page.php
RewriteCond %{REQUEST_URI} ^\/page\.php
# And the querystring matches tokenid=DIGIT&tokenname=TOKEN_NAME
RewriteCond %{QUERY_STRING} tokenid=\d&tokenname=(.*)
# Then rewrite the URI to TOKEN_NAME
RewriteRule ^(.*)$ %1? [L,R]

Если хотите, вы можете попробовать это в Интернете.

введите здесь описание изображения

person sepehr    schedule 31.12.2016
comment
Я попробовал ваше предложение, но я получаю страницу с ошибкой 404, я не могу восстановить содержимое страницы. - person Shrish Pulkit; 31.12.2016
comment
Что касается модуля перезаписи Apache, вы правильно перенаправляете на /About Us страницу. Вы должны убедиться, что URI действительно существует. Добавление правила перезаписи не делает эту страницу волшебным образом доступной. - person sepehr; 31.12.2016
comment
да, но я извлекаю страницу из базы данных на основе идентификатора токена и имени токена, и я переписываю URL-адрес, чтобы пользователь не видел дополнительную строку запроса. - person Shrish Pulkit; 31.12.2016