为什么htaccess规则重写url后我无法访问我的页面和查询参数?

问题描述 投票:0回答:2
  1. 我有一个表单的网址 --> https://websitename.com/content?id=xyz
  2. 我想重写表单中的url --> https://websitename.com/content/xyz
  3. 我希望在重写 url 后能够在内容页面上访问查询参数(id)及其值(xyz)
  4. 所有页面均为*.php页面
  5. 我使用了以下 htaccess 重写规则
    RewriteEngine On
    
    # Hide .php file extension in the urls
    RewriteRule ^([^/.]+)$ $1.php
    
    RewriteRule ^content/([A-Za-z0-9-]+)/?$ content?id=$1 [NC,L]
    
    
  6. 当我导航到重写的网址时,它不起作用,并且出现以下错误: “未找到 在此服务器上找不到请求的 URL”
  7. 我也无法访问重写的url上的查询参数及其值
  8. 但是,当我输入原始网址时,它就起作用了,我可以访问查询参数及其值

如果有人可以帮助我找出我做错了什么以及如何解决这个问题,我将非常感激。

谢谢, 德克斯特尔。

apache .htaccess mod-rewrite url-rewriting friendly-url
2个回答
3
投票

根据您展示的示例,请尝试按照以下操作一次。请在测试您的网址之前清除浏览器缓存。

RewriteEngine On

# Hide .php file extension in the urls
RewriteRule ^([^/.]+)$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^content/([A-Za-z0-9-]+)/?$ content.php?id=$1 [NC,L] 

您可能需要使用基本标签来修复您的js和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html,那么您的相关资源将从 /file/ 加载,它不是目录,而是重写的 html 文件。要解决此问题,请使链接绝对或使用基本标签。在网页的标题中添加此

<base href="/">
,以便您的相关链接可以从正确的位置加载。


0
投票

我也想在我的网站上做,我正在尝试为 .htaccess 制定规则,我想保护我的 .php 文件免受人们访问,但我正在使用需要访问权限才能工作的联系表单,所以我想仅禁用人类访问这可能吗?

© www.soinside.com 2019 - 2024. All rights reserved.