我需要从网址中删除特定内容。在这里,我给出一个页面名称user.php
,并使用$_GET['url']
它获取它,然后使用PHP explode()
方法使其成为数组。
https://www.example.com/index.php?url=user
我需要删除index.php?url=
这个样子,
https://www.example.com/user
现在,我已经在以下代码中使用了此代码.htaccess
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule index.php?url=$1 [QSA, L]
几乎一切都很好,user.php
页面已完美加载。但是,当我给我的URL加上斜杠时,它停止显示CSS或其他IMG目录。但是,当我删除.htaccess
文件时,该文件在以下URL中可以正常工作:
https://www.example.com/index.php?url=user/anonymous
但是,当我分配.htaccess
规则时,无法在此URL中使用。
https://www.example.com/user/anonymous
为什么我的所有样式表和其他目录无法正常运行?
RewriteRule index.php?url=$1 [QSA, L]
我认为您的问题中有两个明显的错别字(?),使该指令完全无效...您缺少RewriteRule
模式,因此它实际上不匹配任何内容,并且flags参数中的错误空格在语法上是无效的,导致500 Internal Server Error响应?!
该RewriteRule
指令应写为:
RewriteRule ^([\w/-]+)$ index.php?url=$1 [QSA,L]
^([\w/-]+)$
匹配包含任何字符的URL路径:a-z
,A-Z
,0-9
,_
(下划线), /
(斜线)和-
(连字符)。我排除了点,这自然是真实文件名的一部分。
您还应确保禁用MultiViews,以免mod_negotiation之前不重写请求mod_rwrite
-因为您的“无扩展名”请求似乎直接映射到文件名。例如。/user
映射到/user.php
。将以下内容放在.htaccess
文件顶部:
Options -MultiViews
但是,当我给我的URL加上斜杠时,它停止显示CSS或其他IMG目录。
这不是的问题.htaccess
,而是由对您的静态资源使用相对的客户端网址引起的。当你请求的URL /user/anonymous
,则浏览器将解决任何相对URL 相对于以/user/anonymous
(不是文档根目录-这可能是你期待什么)。如果您有一个相对的URL,css/styles.css
那么浏览器自然会将其解析为/user/css/styles.css
-可能不存在(并且可能会被重写为index.php
-但这不是问题,但实际上不存在)是问题)。
如果您在浏览器中查看网络流量(HTTP请求),它应该为您提供提示。
您需要更改客户端URL,以使用相对于根的URL(以斜杠开头)或绝对(方案+主机名)URL来解决此问题。