.htaccess ModRewrite:未找到 Url

.htaccess ModRewrite: Url was not found

我的目标是使用 .htaccess 将 http://ipaddress/directory/file.php?id=47 重定向到 http://ipaddress/directory/47id 参数会有所不同,可以是任何数字串,例如 1、2、3、10、20、300 等。我当前的 .htaccess 文件如下:

RewriteEngine on
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule (.*) /directory/%1? [R=301,L]

重写确实将 url 更改为我想要的!但是我在重定向后收到错误消息,其中指出 Not Found - 在此服务器上未找到请求的 URL。 我不确定为什么重定向有效但确实如此不加载具有 id 参数和实际 PHP 文件的上一页。

谢谢!

您需要对

进行内部重写
RewriteEngine on

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule ^file\.php$ /directory/%1? [R=301,L,NC]

RewriteRule ^directory/(\d+)/?$ /directory/file.php?id= [L,QSA,NC]

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 条件用于确保重定向规则在mod_rewrite 的下一个循环中不会在从上一个规则重写完成后执行。

使用您展示的示例,请尝试遵循以下规则。确保您的 htaccess 存在于根文件夹中。确保在测试您的 URL 之前清除您的浏览器缓存。

##Making RewriteEngine ON here.
RewriteEngine on
##Checking condition if THE_REQUEST is in same format which OP has mentioned for URI and mentioning Rule then.
RewriteCond %{THE_REQUEST} \s/file\.php\?id=(\d+)\s [NC]
RewriteRule ^ /directory/%1? [R=301,L]
RewriteRule ^directory/(\d+)/?$ /directory/file.php?id= [NC,L,QSA]