为什么在 htaccess 规则重写 url 后我无法访问我的页面和查询参数?
Why can't I access my page and query params after htaccess rules rewrite the url?
- 我有一个 url 的形式 --> https://websitename.com/content?id=xyz
- 我想重写表格中的url --> https://websitename.com/content/xyz
- 我希望能够在重写 url 后访问内容页面上的查询参数 (id) 及其值 (xyz)
- 所有页面都是*.php页
- 我使用了以下 htaccess 重写规则
RewriteEngine On
# Hide .php file extension in the urls
RewriteRule ^([^/.]+)$ .php
RewriteRule ^content/([A-Za-z0-9-]+)/?$ content?id= [NC,L]
- 当我导航到重写的 url 时,它不起作用并且出现以下错误:
“未找到
在此服务器上找不到请求的 URL"
- 我也无法访问重写的查询参数及其值 url
- 但是,当我输入原始 url 时,它起作用了,我可以访问查询参数及其值
如果有人能帮助我找出我做错了什么以及如何解决这个问题,我将不胜感激。
谢谢,
德克斯特
使用您展示的示例,请尝试执行一次。请在测试您的 URL 之前清除浏览器缓存。
RewriteEngine On
# Hide .php file extension in the urls
RewriteRule ^([^/.]+)$ .php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^content/([A-Za-z0-9-]+)/?$ content.php?id= [NC,L]
您可能需要使用base标签来固定您的js和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html 那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用 base 标记。在您网页的 header 中添加此 <base href="/">
以便您的相关链接可以从正确的位置加载。
- 我有一个 url 的形式 --> https://websitename.com/content?id=xyz
- 我想重写表格中的url --> https://websitename.com/content/xyz
- 我希望能够在重写 url 后访问内容页面上的查询参数 (id) 及其值 (xyz)
- 所有页面都是*.php页
- 我使用了以下 htaccess 重写规则
RewriteEngine On # Hide .php file extension in the urls RewriteRule ^([^/.]+)$ .php RewriteRule ^content/([A-Za-z0-9-]+)/?$ content?id= [NC,L]
- 当我导航到重写的 url 时,它不起作用并且出现以下错误: “未找到 在此服务器上找不到请求的 URL"
- 我也无法访问重写的查询参数及其值 url
- 但是,当我输入原始 url 时,它起作用了,我可以访问查询参数及其值
如果有人能帮助我找出我做错了什么以及如何解决这个问题,我将不胜感激。
谢谢, 德克斯特
使用您展示的示例,请尝试执行一次。请在测试您的 URL 之前清除浏览器缓存。
RewriteEngine On
# Hide .php file extension in the urls
RewriteRule ^([^/.]+)$ .php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^content/([A-Za-z0-9-]+)/?$ content.php?id= [NC,L]
您可能需要使用base标签来固定您的js和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html 那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用 base 标记。在您网页的 header 中添加此 <base href="/">
以便您的相关链接可以从正确的位置加载。