Apache .htaccess-url中不带子文件夹的字符串

Apache .htaccess-url中不带子文件夹的字符串,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,URL如下所示http://local.example.com/features.html我需要的是添加一个类似“country”的文本http://local.example.com/us/feature.html但是当我点击URL时,网站显示了404错误代码 这仅是可视的,无需创建US子文件夹 代码 RewriteEngine On RewriteCond %{HTTP_HOST} local.example.com$ [NC] RewriteCond %{HTTP_COOKIE} loca

URL如下所示
http://local.example.com/features.html
我需要的是添加一个类似“country”的文本
http://local.example.com/us/feature.html
但是当我点击URL时,网站显示了404错误代码


这仅是可视的,无需创建US子文件夹

代码

RewriteEngine On
RewriteCond %{HTTP_HOST} local.example.com$ [NC]
RewriteCond %{HTTP_COOKIE} location=us [NC] --> CHECK COOKIE FOR ACTION
RewriteCond %{REQUEST_URI} !^/us/  --> EXCLUDE US FOR REDIRECT LOOP
RewriteCond %{REQUEST_URI} !^/blog/ --> EXCLUDE BLOG FOLDER WITH WORDPRESS
RewriteRule ^(.*)!\.(css|js|png|jpg)$ http://local.example.com/us/$1 [R=302,L]
重写规则
模式将与请求的URL不匹配(因为错误的
),因此此指令实际上不会执行任何操作。由此,我还假设您希望排除对CSS、JS、
.png
.jpg
文件的请求?您还有一个条件,排除对
/blog/
子目录的请求,但是,您在问题中没有提到这一点吗

代码中是否也引用了cookie?但是,您在问题中没有提到这一点,并且这在当前状态下不起作用(因为它不会出现在初始请求中),因此我暂时忽略这一点

请尝试以下操作:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^local\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg)$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule !^us/ /us%{REQUEST_URI} [R=302,L]
上述说明,给出了对
/foo/bar
的请求

  • 对于不是以
    /us/
  • 并用于
    主机
    local.example.com
  • 并且不适用于以
    .css
    .js
    .png
    .jpg
    结尾的URL
  • 并且不是以
    /blog/
  • 然后302(临时)重定向到
    /us/foo/bar

  • 除非此帐户上有多个主机,否则您不需要在规则中明确检查
    主机
    标题?

    “不创建美国子文件夹。”-啊,在发布我的答案后才注意到这一点。如果
    /us
    子文件夹实际上不存在,那么
    http://local.example.com/us/feature.html
    需要解决吗?您在HTML源代码中实际链接到的URL是什么?啊哈,我没有提到这一点的错误。您的代码工作得非常完美,但我的想法(当然,如果可能的话)不是执行重定向,而是在视觉级别添加US。
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^local\.example\.com$ [NC]
    RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg)$
    RewriteCond %{REQUEST_URI} !^/blog/
    RewriteRule !^us/ /us%{REQUEST_URI} [R=302,L]