0

现有页面称为/foo/bar.php。我所做的是重写,以便当用户键入时/foobar,它会加载/foo/bar.php(同时保留/foobar在 url 栏中)的内容

但我也想要相反的 - 当用户点击链接或类型/foo/bar.php时,我希望/foobar在 url 中有。原因是避免手动更改所有链接。

我怎么能做到这一点(如果可能没有http重定向,但通过一些重写魔法)?这两个规则有可能共存吗?

编辑- 在第一次回复之后,我意识到我对问题的描述不正确。/foobar不应该是 , of 的串联foobar而是/foo/bar.php任意字符串 ( /whatever)。

编辑2:

我现在RewriteRule ^whetever/?$ /foo/bar.php [L]/ .htaccess. 然后我RewriteRule bar\.php$ /whetever [R=302,L]/foo .htaccess. 问题是它是一个循环引用并且失败了。

谢谢,

约翰

4

2 回答 2

1
RewriteEngine On

RewriteCond %{REQUEST_URI} ^/foo/[^/]+\.php$
RewriteCond %{IS_SUBREQ} !true
RewriteRule ^/foo/([^/]+)\.php$ /foo$1 [R,L]

RewriteCond %{REQUEST_URI} ^/foo[^/]
RewriteRule ^/foo(.*) /foo/$1.php [L]

第一部分匹配/foo/something.php并将它们转换为/foosomething,但前提是它不是子请求

第二部分接受 any/foosometing并将其转换为/foo/something.php, 通过子请求

于 2012-07-25T15:18:32.740 回答
0

您可以尝试匹配%{THE_REQUEST}并仅在实际请求针对 php 文件时才进行重定向:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /foo/bar\.php
RewriteRule bar\.php$ /whatever [R=302,L]

RewriteRule ^whatever/?$ /foo/bar.php [L]
于 2012-07-25T17:42:27.603 回答