RewriteEngine on
RewriteCond %{QUERY_STRING} (^|&)public_url=([^&]+)($|&)
RewriteRule ^process\.php$ /api/%2/? [L,R=301]
其中domain.tld/app/process.php?public_url=abcd1234
是脚本的实际位置。
但是我试图让.htaccess使URL像这样:domain.tld/app/api/acbd1234
。本质上隐藏了process.php
脚本和get查询?public_url
。
然而,上面的脚本返回错误404未找到。
3条答案
按热度按时间5q4ezhmt1#
我想这就是你真正在寻找的:
如果您收到一个内部服务器错误(http状态500),然后检查您的http服务器错误日志文件。如果你操作的是一个非常旧的apache http服务器版本,你可能需要将
[END]
标志替换为[L]
标志,在这种情况下,[L]
标志可能会很好地工作。还有一个一般性的提示:你应该总是倾向于把这样的规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(
.htaccess
样式文件)。这些文件是出了名的容易出错,很难调试,他们真的放慢了服务器。只有在您无法控制主机配置的情况下,才支持将它们作为最后一个选项(请阅读:真正便宜的托管服务提供商),或者如果您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦)。更新:
基于你在下面评论中的许多问题(我们再次看到问题本身的精确性是多么重要;- ))我添加了这个变体,实现了对路径组件的不同处理:
jckbn6z72#
我正在尝试让
.htaccess
将URL设置为这样:example.com/app/api/acbd1234
。你不能在
.htaccess
中这样做。您可以在应用程序中更改URL,然后将新URL重写为实际/旧URL。(如果旧的URL已经被搜索引擎索引,你只需要重定向它-但你需要注意重定向循环。因此,将应用程序中的URL更改为
/app/api/acbd1234
,然后在.htaccess
中重写(我假设在/app
中)。举例来说:您在前面的指令中包含了一个尾随斜杠,但在示例URL中省略了它,因此我在这里也省略了它。
如果您还需要重定向旧的URL以进行SEO,那么您可以在 * 内部重写 * 之前实现重定向:
对
REDIRECT_STATUS
的检查是为了避免重写循环。括号内的?:
避免了组被捕获为反向引用。只有当你确定
302
(临时)工作正常时,才将其更改为301
(永久),以避免浏览器缓存错误的重定向。u5rb5r593#
.htaccess rewrite returning Error 404 add this line your .htaccess make sure change domain name重定向301 /登录http://test.test.com