使用.htaccess删除URL中不需要的子目录后缀

时间:2017-07-24 12:14:10

标签: regex .htaccess

我有一个网址https://example.com/portfolio/portfolio/page/2/,我需要将其重定向到https://example.com/contact/

我的尝试是:

RewriteCond %{REQUEST_URI} ^/portfolio/portfolio/page/2/ [NC]
RewriteRule ^/?/page/2/(.*)$ /contact/$1 [R,L]

OR

Redirect 301 /portfolio/portfolio/page/2/ /contact/

两者都失败并重定向到https://example.com/contact/page/2/而非https://example.com/contact/

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

根据您在问题评论中提供的其他信息,这是您想要的简单重写规则:

RewriteEngine on
Rewrite /?portfolio/portfolio/page/2/?$ /contact [END]

如果您想更改浏览器中可见的URL,则需要实现外部重定向:

RewriteEngine on
Rewrite /?portfolio/portfolio/page/2/?$ /contact [R=301]

如果这导致内部服务器错误(http状态500),那么您可能会运行非常旧版本的apache http服务器。然后尝试使用[L]标志而不是[END]。在这种情况下,您将在http服务器错误日志文件中看到相应的条目。

一般提示:您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。只有在您无法控制主机配置(读取:非常便宜的托管服务提供商)或者您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)的情况下,它们才被支持作为最后一个选项。 )。