You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess限制Laravel多语言站点仅允许指定URL访问?

使用.htaccess限制Laravel网站的URL访问模式

实现方案

通过.htaccess规则过滤请求,仅允许符合指定模式的URL访问,不符合的请求直接返回404状态。以下是具体配置及说明:

最终.htaccess代码

将以下内容添加到Laravel项目的根目录(或public目录,取决于你的web根配置)的.htaccess文件中:

RewriteEngine On

# 移除URL末尾斜杠(保持URL一致性,可选)
RewriteRule ^(.*)/$ /$1 [L,R=301]

# 对不存在的文件/目录,检查URL是否符合允许的模式
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# 排除允许的URL模式
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_URI} !^/(de|it|fr)$
RewriteCond %{REQUEST_URI} !^/some_text/(de|it|fr)$
# 不符合则返回404
RewriteRule ^ - [R=404,L]

# Laravel默认前端控制器规则
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

规则解析

  1. 静态资源放行:!-d和!-f确保现有文件(如CSS、图片)和目录不受规则限制,正常访问。
  2. 允许的URL匹配:
    • !^$:允许根路径(https://www.sampledomain.ch/)
    • !^/(de|it|fr)$:允许根目录下的语言码路径(/de、/it、/fr)
    • !^/some_text/(de|it|fr)$:允许some_text目录下的语言码路径(/some_text/de等)
  3. 404处理:不符合上述模式的请求直接返回404状态码。

自定义调整

  • 如果some_text不是固定路径,而是任意文本(比如允许任何目录名后跟语言码),可将对应规则改为:
    RewriteCond %{REQUEST_URI} !^/[a-zA-Z0-9_-]+/(de|it|fr)$
    
  • 若想使用Laravel的自定义404页面而非Apache默认页面,可将404规则改为:
    RewriteRule ^ index.php [L,R=404]
    
    这样请求会转发到Laravel,由框架返回自定义404视图。

内容的提问来源于stack exchange,提问作者Asith Abanpola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:52:52