2011-06-07 3 views
0

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

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

До сих пор, я могу получить его, чтобы перенаправить/пользователю /user.php, но/paul потерян; нарушая мой сценарий.

Мой текущий .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] 

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

ответ

1

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

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

хмм, я не могу получить эту работу либо – Paul

+0

любые другие идеи? – Paul

0

Поместите этот код в файле .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] 
+0

извините, это не сработает для меня – Paul

+0

@Paul: Может быть, вы можете дать некоторые детали того, что не работает. Кстати, я тестировал этот ответ на своих Linux и Mac перед публикацией. – anubhava

+0

Это та же проблема, что и раньше:/пользователь правильно перенаправляет /user.php, но/user/paul дает 404 – Paul

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