繁体   English   中英

如何使用 .htaccess 重写 URL(删除 id?=1)

[英]How to rewrite URLs with .htaccess (removing id?=1)

我已经查看了所有内容,但还没有弄清楚如何进行这项工作,我相信对于知道自己在做什么的人来说,这非常简单。 对于初学者,我已经确保启用了 mod_rewrite 并且删除了.php扩展名是有效的,所以我知道这不是问题。

目前我正在一个论坛上工作,我想要做的只是删除 URL 的?id=1方面,因此基本上使 URL 看起来像这样:

http://url.com/Forum/Topic/1

代替

http://url.com/Forum/Topic?id=1

/Forum是一个目录,里面有一个名为Topic.php的文档

我当前的.htaccess看起来像这样:

Options -MultiViews
RewriteEngine on

RewriteRule ^(.+)\.php$ /$1 [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,END]

任何帮助,将不胜感激。

假设您已将应用程序中的 URL 更改为使用http://example.com/Forum/Topic/1然后尝试以下操作:

# Remove .php file extension on requests
RewriteRule ^(.+)\.php$ /$1 [R,L]

# Specific rewrite for /Forum/Topic/N
RewriteRule ^(Forum/Topic)/(\d+)$ $1.php?id=$2 [END]

# Append .php extension for other requests
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ /$1.php [END]

您检查%{REQUEST_FILENAME}.php原始条件不一定检查您要重写的相同“URL” - 取决于请求的 URL。

更新:但是我将如何添加另一个 ID 变量,例如使http://example.com/Forum/Topic/1?page=1看起来像http://example.com/Forum/Topic/1/1

因此,换句话说/Forum/Topic/1/2转到/Forum/Topic.php?id=1&page=2 您可以添加另一个规则。 例如:

# Specific rewrite for /Forum/Topic/N
RewriteRule ^(Forum/Topic)/(\d+)$ $1.php?id=$2 [END]

# Specific rewrite for /Forum/Topic/N/N
RewriteRule ^(Forum/Topic)/(\d+)/(\d+)$ $1.php?id=$2&page=$3 [END]

或者,您可以将它们合并为一个规则。 但是,这意味着当省略第二个参数时,您将获得一个空的page= URL 参数(尽管这应该不是问题)。

# Specific rewrite for both "/Forum/Topic/N" and "/Forum/Topic/N"
RewriteRule ^(Forum/Topic)/(\d+)(?:/(\d+))?$ $1.php?id=$2&page=$3 [END]

(?:/(\\d+))? 部分匹配可选的第二个参数。 括号内的?:使它成为一个非捕获组(否则我们最终会得到一个匹配/2的附加捕获子模式)和尾随的? 使整个组可选。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM