【发布时间】:2019-12-11 16:11:25
【问题描述】:
我正在尝试使用 .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]
这将重写并删除文件扩展名(http://example.com/file.php 到 http://example.com/file)
我想向页面发送一些数据(可能是字符串)
假设http://example.com/file2.php?v=something
我想改写成http://example.com/file2/something,获取文件中的值
我尝试了以下方法
如果我尝试Method 1 和Method 2(一个接一个),它会抛出以下错误
[2019 年 8 月 3 日星期六 12:13:12.881757] [core:alert] [pid 23832:tid 1912] [客户端 ::1:62842] 路径/to/htaccess/file/.htaccess: RewriteRule:错误的标志分隔符
我尝试This Method 来防止该错误,然后它使我陷入错误
[2019 年 8 月 3 日星期六 13:14:02.121514] [核心:错误] [pid 23832:tid 1916] (20023) 给定路径高于根路径:[client ::1:51899] AH00127: 无法映射 GET /path/to/my/file2?v=something.php HTTP/1.1 到文件
我认为是因为.htaccess 将值重写为.php 文件。
如何同时隐藏文件扩展名和获取值?
【问题讨论】:
-
您得到的第一个错误与规则无关,而是您在规则末尾使用的标志。您使用哪些标志?
-
一开始我用
RewriteRule ^(.*)$ works?v=$1 [NC,L],它抛出了第一个错误。所以我把它改成了RewriteRule ^(.*)$ works?v=$1 [L,R=301,NC]这个尝试抛出第二个错误 -
你看到这篇文章了吗? stackoverflow.com/questions/20890004/…
-
是的,通过只检查这个我改变了它
标签: php .htaccess url mod-rewrite url-rewriting