Apache .htaccess URL屏蔽而不是重定向

Apache .htaccess URL屏蔽而不是重定向,apache,.htaccess,url-masking,Apache,.htaccess,Url Masking,我试图隐藏URL,就像真正的URL是www.somedomain.com/subfolder/index.php?p=page3它显示www.somedomain.com/subfolder/page3一样,我知道这里问了很多这样的问题,我也搜索了很多,但大多数结果都不符合我的要求,此外,我几乎什么都不知道,除了htaccess调整的基础知识 我搜索时得到的一个结果具有以下htaccess代码: 选项+以下符号链接 选项+索引 重新启动发动机 重写规则^index.php$%{QUERY\u S

我试图隐藏URL,就像真正的URL是
www.somedomain.com/subfolder/index.php?p=page3
它显示
www.somedomain.com/subfolder/page3
一样,我知道这里问了很多这样的问题,我也搜索了很多,但大多数结果都不符合我的要求,此外,我几乎什么都不知道,除了htaccess调整的基础知识

我搜索时得到的一个结果具有以下htaccess代码:

选项+以下符号链接
选项+索引
重新启动发动机
重写规则^index.php$%{QUERY\u STRING}[C]
重写规则p=(*)www.somedomain.com/subfolder/$1?[R=301,L]

它做了一些关于URL重写的技巧,但是它重定向了页面,而不是仅仅屏蔽URL,并且它给出了404错误,即使我删除了R=301,它也不起作用


此外,当我启动子文件夹
www.somedomain.com/subfolder/
的索引页时,上面的代码给出了一个500服务器错误

最后,我想提到的是,我正在使用localhost中的一个子目录进行测试,以防它有所不同,因为我在web上发现的一些代码要么根本不起作用,要么它们给出500个服务器错误

非常感谢。

您可以尝试以下方法:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Prevent loops
RewriteCond %{REQUEST_URI} !index\.php         [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/? [NC]
RewriteRule .*  %1/index.php?page=%2           [L]
静默映射:

http://www.somedomain.com/anyfolder/val
带或不带尾随斜杠

上面是在浏览器地址栏中输入并显示的URL

致:

http://www.somedomain.com/anyfolder/index.php?p=val

假定字符串
anyfolder
val
是动态的


对于永久重定向,将
[L]
替换为
[R=301,L]

我将我的答案标记为删除-我把你的目的地列在第一位,来源列在第二位,这让我感到困惑,因为你在问题中列出了它们,所以我在回答中把它们颠倒了过来(通常情况下,按照规则中出现的相同顺序写下您正在做的事情会更容易-源,然后是目标)。@faa的答案顺序正确。对此表示抱歉。这个答案是正确的,请注意(@JEES)第二次重写特定于两级目录结构,如您问题中的示例所示。如果您需要将其应用于不同数量的目录级别,则需要对其进行调整。我想我让大家都感到困惑,对此我深表歉意,但我正试图转换我所谓的“丑陋URL”通过动态页面插入
www.somedomain.com/subfolder/index.php?p=page3
生成一个更吸引人、搜索引擎友好的“漂亮URL”像这样一个
www.somedomain.com/subfolder/page3
甚至进入
www.somedomain.com/subfolder/pages/page3
,同时仍然加载相同的页面并注入相同的查询字符串。
www.somedomain.com/subfolder/page3
这就是我答案中的规则。试试看。不用说
www.somedomain.com/subfolder/page3
是链接到浏览器地址栏或输入并显示在浏览器地址栏中的URL。如果它对您有效,我可以修改目录结构中任意级别的答案,但是,再次尝试一下。@faa是的,它工作了,只是需要对目录级别进行一些调整。在我添加了另一个子di之后,现在一切都很有魅力rectory([^/]+)及其相应的%3。非常感谢@faa和@David的帮助和时间,仅就问题的最后一部分,我在上面的代码中添加了以下行以去除index.php
RewriteCond%{the_REQUEST}/index.php RewriteRule^index.php$http://www.somedomain.com  [R=301,L]
再次非常感谢。我遇到了一个类似的问题,请查看您是否可以帮助我。这是链接