我有:
mydomain.com/folder-name/segment1/segment2
我想将其更改为:
mydomain.com/segment1/segment2
使用301重定向。
我试过了:
RewriteCond %{REQUEST_URI} !^/test/.*$
RewriteRule ^(.*)$ /test/$1 [L]
但它不起作用
这是我的htacess文件:
# #AddHandler application/x-httpd-php53 .php .php5 .php4 .php3
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^/b1/.*$
RewriteRule ^(.*)$ /b1/$1 [R=301,L]
答案 0 :(得分:1)
问题第一部分的答案应该是这样的:
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/? $2/$3 [R=301,L]
您尝试过的第二个代码与您最初要求的相反。此行与不以/test/
开头的任何内容匹配:
RewriteCond %{REQUEST_URI} !^/test/.*$
这一行表示取一切并将其重写到/test/
目录:
RewriteRule ^(.*)$ /test/$1 [L]
因此,将测试目录中没有的任何内容重写到测试目录中。
如果您尝试专门删除单词test,则在尝试创建匹配时删除!
符号。既然你已经知道它被称为test
,那么就没有必要让Apache执行这个'test'的外观,因为Apache handles the RewriteCond statement after the RewriteRule(相当不直观)。
RewriteCond %{REQUEST_URI} ^/?test
您可以像这样专门化重写规则(我添加了[QSA]
来捕获任何查询字符串:
RewriteRule ^test/([^/]+)/([^/]+)/? $1/$2/ [R=301,L,QSA]
答案 1 :(得分:1)
只需将您的代码更改为:
RewriteRule ^test/(.*)$ /$1 [R=301,L,NC]