查询字符串到htaccess中的路径是否正常



你好,在过去的3天里,我一直使用htaccess,似乎不明白为什么我的htaccess文件没有正确更改我的url。

所以我试图将这个查询字符串url从www.example.com/test/user-profile.php?id=4转换为www.example.com/test/user-profile/4

url中的/test/不是一个文件,而是主publichtml目录中的一个文件夹。

这是我的htaccess文件

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^.]+)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /test/user-profile.php?id=$1 [L]
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ /test/user-profile/%1? [R=301,L]

到目前为止,它将转到urlwww.example.com/test/user-profile/4,但它没有加载整个页面。刚刚超过卡住,谢谢你的时间

使用显示的示例,尝试;请尝试以下htaccess规则文件。请确保在测试URL之前清除浏览器缓存。

RewriteEngine ON
RewriteBase /
##RewriteBase /test/
##Extrenal redirect rule.
RewriteCond %{THE_REQUEST} s/(test/user-profile).php?id=(d+)s [NC]
RewriteRule ^  %1/%2?  [R=301,L]
##Internal rewrite rule.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/(.*)/?$  $1/$2.php?id=$3 [QSA,L]

JS/CS rewrite/redirect:您可能需要使用base标记来修复您的JS和其他相关资源。如果你使用相对路径链接js文件,那么该文件显然会得到404,因为它在寻找URL路径。例如,如果URL路径是/file/而不是file.html,那么您的相对资源是从/file/加载的,该文件不是目录,而是重写的html文件。若要修复此问题,请使链接成为绝对链接或使用基本标记。在你的网页标题中添加这个<base href="/">,这样你的相关链接就可以从正确的位置加载。

最新更新