2

我正在尝试将我的 URL 重写http://givehands.co.in/post.php?p=post&id=1http://givehands.co.in/post/1/使用 htacess。

但它会被重定向到 URLhttp://givehands.co.in/post.php?p=post&id=1而不是重写它?我的域 givehands 映射到我的网络服务器的子目录。

任何人都可以帮助我正确的重写规则吗?我是新来的。

Options -Multiviews
RewriteEngine On    # Turn on the rewriting engine
RewriteBase /
RewriteCond %{REQUEST_URI} post/(.*)
RewriteRule post/(.*)/ http://givehands.co.in/post.php?p=post&id=$1 [L]
RewriteCond %{REQUEST_URI} post/
RewriteRule post/ http://givehands.co.in/post.php [L]
4

1 回答 1

3

看起来您的重定向规则中有一个完整的 URL:

RewriteCond %{REQUEST_URI} post/ 
RewriteRule post/ http://givehands.co.in/post.php [L]

将完整的 URL 放在那里会强制 Apache 重定向浏览器而不是重写它: https ://httpd.apache.org/docs/current/mod/mod_rewrite.html

绝对 URL
如果指定了绝对 URL,mod_rewrite 会检查主机名是否与当前主机匹配。如果是这样,则方案和主机名将被删除,并且生成的路径将被视为 URL 路径。否则,将对给定 URL 执行外部重定向。要强制将外部重定向回当前主机,请参见下面的 [R] 标志。

如果 givehands.co.in 是您托管的域,请尝试将其更改为:

RewriteCond %{REQUEST_URI} post/ 
RewriteRule post/ /post.php [L]

如果 givehands.co.in 不在您的服务器上,或者在不同的 VirtualHost 下,那么†</sup> 无法“重写” URL,您必须重定向浏览器(这就是 Apache 采用领导并为你做这件事)。

†</sup> 你实际上可以设置一个反向代理来做这样的事情,但这可能是另一个讨论的话题:)

于 2012-04-15T20:29:03.667 回答