如何使用.htaccess中的RewriteRule命令重写文件夹路径

如何使用.htaccess中的RewriteRule命令重写文件夹路径,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我在理解URL重写规则方面有一些问题 我的网址是 http://example.com/katalog/selection/book.php 我想用RewriteRule将URL更改为 http://example.com/selection 我的代码: RewriteEngine On RewriteRule ^http://example.com/katalog/selection/book.php$ http://example.com/selection [R=301,L] 但是我

我在理解URL重写规则方面有一些问题

我的网址是

http://example.com/katalog/selection/book.php
我想用
RewriteRule
将URL更改为

http://example.com/selection
我的代码:

RewriteEngine On
RewriteRule ^http://example.com/katalog/selection/book.php$ http://example.com/selection [R=301,L]

但是我无法访问新路径。

正如CBroe在评论中提到的那样,
重写规则
模式只匹配URL路径,而不匹配scheme+hostname+路径。但是,“但是我无法访问新路径”表明您希望在内部将请求从
/selection
重写为
/katalog/selection/book.php
——这与您尝试执行的操作完全相反。(虽然
/selection
看起来有点太笼统了?)

在根
.htaccess
文件中尝试以下操作

RewriteEngine On
RewriteRule ^selection$ katalog/selection/book.php [L]
RewriteRule
模式不会在每个目录
.htaccess
文件中以斜杠开头

现在请求URL
/selection
,请求将被内部重写(可见网址不变)到文件
/katalog/selection/book.php


注意:测试前需要清除浏览器缓存,因为浏览器会硬缓存301s。

重写规则在完整URL上不匹配,它只在URL的路径组件上匹配。