.htaccess mod_rewrite удалить расширение .php, но сохранить путь к URL - PullRequest
0 голосов
/ 08 июня 2011

В настоящее время у меня есть PHP-скрипты, которые работают должным образом, меня называют так: www.example.com/user.php/paul и www.example.com/tag.php/food

У меняпроблема с получением .htaccess переписать правильно.Я пытаюсь добиться этого: www.example.com/user/paul www.example.com/tag/food

Пока что я могу заставить его перенаправить / user в /user.php, но/ Павел потерян;нарушая мой сценарий.

Мой текущий .htaccess выглядит так:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET\ /([^.\ ]+\.)+php(\?[^\ ]*)?\ HTTP
RewriteRule ^(.+)\.php$ http://www.example.com/$1 [R=301,L]
RewriteRule ^([^/]+/)*index/?$ http://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://www.example.com/$1 [R=301,L]
RewriteCond $1 !^([^.]+\.)+([a-z0-9]+)$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*[^/])$ /$1.php [L]

Пожалуйста, помогите.Спасибо!Пол

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Вы, вероятно, должны где-то использовать такое правило:

RewriteRule ^/([^/]*)/([^/]*)$ /$1.php/$2

Вот оно снова на английском языке.

First comes the beginning of the path                        ^/
The first component of the path doesn't have / symbols in it [^/]*
We remember it                                               ()
Then comes the slash between the components                  /
Then the second component without the / symbols              [^/]*
Remember it too                                              ()
And the path ends                                            $

Замените его на первые запомненные вещи, за которыми следует .php/ за ним следует вторая запомненная вещь.

Возможно, вы не хотите использовать [L] в этом правиле, перенаправление не нужно, пользователю не нужно знать, что ваши скрипты действительно имеют .php суффикс.

Надеюсь, это правильно, сейчас я не могу проверить это на работающем Apache.

0 голосов
/ 08 июня 2011

Поместите этот код в ваш файл .htaccess:

Options +FollowSymlinks -MultiViews
RewriteEngine on

# external redirect to hide .php
RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC]
RewriteRule ^([^/]+)\.php/(.*)$ /$1/$2 [NE,R=301,L,NC]

# internal redirect to add .php
RewriteRule ^([^/]+)(?<!\.php)/(.*)$ /$1.php/$2 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...