现有页面称为/foo/bar.php
。我所做的是重写,以便当用户输入/foobar
时,它会加载/foo/bar.php
的内容(同时在网址栏中保留/foobar
)
但我也想要相反 - 当用户点击链接或键入/foo/bar.php
时,我希望在网址中包含/foobar
。原因是避免手动更改所有链接。
我怎么能这样做(如果可能没有http重定向,但通过一些重写魔法)?这两个规则是否有可能共存?
编辑 - 第一次回复后,我意识到我对问题的描述不合适。 /foobar
不应该是foo
bar
/foo/bar.php
的串联,而是任意字符串(/whatever
)。
编辑2:
我现在在RewriteRule ^whetever/?$ /foo/bar.php [L]
中添加了/ .htaccess
。然后我在RewriteRule bar\.php$ /whetever [R=302,L]
中添加了/foo .htaccess
。问题是它是一个循环引用并且失败了。
谢谢,
约翰
答案 0 :(得分: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
,但仅当不是子请求时 。
第二部分接受任何/foosometing
并通过子请求
/foo/something.php
答案 1 :(得分: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]