我很难开始使用 mod_rewrite。我已经在谷歌上搜索了大约一个小时,但似乎没有任何效果。我想要做的是将
example.com/species.php 更改为 example.com/species
并将
example.com/species.php?name=frog 更改为 example.com/species/frog。
使用
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^species/(.*)$ /species.php?name=$1
我可以让 example.com/species.php?name=frog 显示为 example.com/species/frog,并使用
RewriteRule ^species/ /species.php
我可以让 example.com/species.php 显示为 example.com/species/,但我不能让它们同时工作。
此外,没有斜杠的 example.com/species 总是以 404 出现。
我考虑过只创建一个 /species/ 目录来解决任何问题,但我宁愿只为一个 species.php 文件设置一些规则。任何帮助将不胜感激!
编辑(因为我在 8 个小时内无法回答我自己的问题):
我似乎已经解决了我的两个问题。我将 .htaccess 更改为:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^species/(.*)$ /species.php?name=$1
RewriteRule ^species/?$ /species.php
第二个 RewriteRule 成功地将 example.com/species 重定向到 example.com/species.php,同时让另一个 RewriteRule 工作。
但是,如果我在 example.com/species/ 中输入一个斜杠,它会被读取为 example.com/species.php?name= 并且会抛出错误,因为没有提交名称,所以我只是添加了
if(isset($_GET['name']) && empty($_GET['name'])) {header('location: http://example.com/species');}
因此,如果我使用 example.com/species/ 它会重定向到 /species 并按需要工作。