PHP用.htaccess重写URL
我正在尝试使用.htaccess重写URL。这些都是我想重写的东西 从URL中删除文件扩展名 通过URL传递参数并在文件中获取它 我当前的.htaccess文件如下所示PHP用.htaccess重写URL,php,.htaccess,url,mod-rewrite,url-rewriting,Php,.htaccess,Url,Mod Rewrite,Url Rewriting,我正在尝试使用.htaccess重写URL。这些都是我想重写的东西 从URL中删除文件扩展名 通过URL传递参数并在文件中获取它 我当前的.htaccess文件如下所示 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [NC,L] RewriteRule ^(.*)$ works?v=$1 [NC,L] 这
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteRule ^(.*)$ works?v=$1 [NC,L]
这将重写并删除文件扩展名http://example.com/file.php 到http://example.com/file
我想向页面发送一些数据,可能是字符串
比方说http://example.com/file2.php?v=something
我想把它改写成http://example.com/file2/something 并获取文件中的值
我尝试了以下方法
如果我一个接一个地尝试,就会抛出以下错误
[Sat Aug 03 12:13:12.881757 2019][core:alert][pid 23832:tid 1912]
[client::1:62842]路径/to/htaccess/file/.htaccess:
重写规则:错误的标志分隔符
我试图阻止那个错误,但它把我抛到了错误之下
[Sat Aug 03 13:14:02.121514 2019][core:error][pid 23832:tid 1916]
20023给定路径位于根路径上方:[客户端::1:51899]
AH00127:无法映射获取
/path/to/my/file2?v=something.php HTTP/1.1 to file
我认为这是因为.htaccess正在将值重写为.php文件
如何隐藏文件扩展名并同时获取值?我想这就是您要寻找的:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?([^/]+)/?$ /$1.php [END]
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/?$
RewriteRule ^ /%1.php?v=$2 [END]
这当然可以根据您的具体情况进一步细化。你的问题在几点上有点含糊。但是上面的例子应该为你指出正确的方向
如果您使用上述规则收到内部服务器错误http status 500,那么很可能您操作的是非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到不受支持的[END]标志的明确提示。您可以尝试升级或使用较旧的[L]标志,在这种情况下,它可能会起同样的作用,不过这取决于您的设置
此规则同样适用于http服务器主机配置或动态配置文件.htaccess文件。显然,重写模块需要在http服务器中加载,并在http主机中启用。如果使用动态配置文件,则需要注意在主机配置中启用该文件的解释,并且该文件位于主机的文档根文件夹中
此规则同样适用于http服务器主机配置或动态配置文件.htaccess文件。显然,重写模块需要在http服务器中加载,并在http主机中启用。如果使用动态配置文件,则需要注意在主机配置中启用该文件的解释,并且该文件位于主机的文档根文件夹中 您得到的第一个错误与规则无关,而是您在规则末尾使用的标志。您使用了哪些标志?首先,我使用了RewriteRule^.*$works?v=$1[NC,L],它抛出了第一个错误。所以我把它改成了RewriteRule^.*$works?v=$1[L,R=301,NC]这是第二个错误,你看到这篇文章了吗?是的,通过检查这个,我改变了它。这对我来说有点有效,现在它没有显示500个错误。但服务器将file2/something作为文件夹。我所有的CSS和JS都使用这个URL。像这个路径/to/file2/something/css/base.css和im GET-path/to/file2/something/css/base.css net::ERR_中止404控制台中找不到错误。这应该只在file2.php中有效,不应该对CSS和JS链接使用相同的方法。对/file2/something/CSS/base.CSS的请求不会被上述规则重写。因为如果第一个虚拟文件夹后面的路径部分包含/,则第二个规则条件中的第二个捕获不匹配。因此,我假设您没有真正使用上面的代码,而是更改了一些变体。