我目前有正常运行的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,但/ 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]
请帮忙。 谢谢! 保罗
答案 0 :(得分: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上查看它。
答案 1 :(得分: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]