.htaccess ModRewrite:未找到 Url
.htaccess ModRewrite: Url was not found
我的目标是使用 .htaccess 将 http://ipaddress/directory/file.php?id=47
重定向到 http://ipaddress/directory/47
。 id 参数会有所不同,可以是任何数字串,例如 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]
我的目标是使用 .htaccess 将 http://ipaddress/directory/file.php?id=47
重定向到 http://ipaddress/directory/47
。 id 参数会有所不同,可以是任何数字串,例如 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]