【问题标题】:apache RewriteRule not workingapache RewriteRule 不起作用
【发布时间】:2015-06-06 14:28:26
【问题描述】:

我有这个网址http://www.example.com/Courses/get/38789/my-course,我将此规则添加到 .htaccess 文件中

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/Courses/get
RewriteRule ^Courses/get/(.*)/(.*)$ course-$1-$2 [R=301,L]

但是当我转到http://www.example.com/Courses/get/38789/my-course 时没有任何反应,我停留在同一页面上,没有重定向。

p.s 链接只是一个例子,不是实际链接

【问题讨论】:

  • 这是完整的.htaccess 吗?这个 .htaccess 在哪里?
  • @anubhava 它在根文档 public_html 中
  • /Courses/是一个真实的目录吗?
  • @anubhava 不,不是
  • 那么这个URL是怎么处理的呢?这里不是有一些 CMS/PHP 控制器吗?

标签: apache .htaccess mod-rewrite


【解决方案1】:

更有效的方法是使用以下方法:

RewriteRule ^Courses/get/(\d+)/([^/]+)/?$ /course-$1-$2 [R=301,L]

现在,请记住,此规则应位于任何可能将请求重写为 index.php 文件的规则之前。如果您在问题中发布的代码是您的所有代码,这自然是正确的。如果没有,请发布您的整个 .htaccess 文件,以便我们确保将其放置在正确的位置。

确保mod_rewrite 已打开,并且您已在虚拟主机/Apache 站点配置中设置AllowOverride All。如果您在共享生产服务器上运行,则这不适用于您。

旁注:虽然它确实有效,但您无需使用两次RewriteEngine on - 只需在文件开头使用一次就足够了。您也不需要RewriteCond %{REQUEST_URI} ^/Courses/get - 它本质上是多余的,因为您已经在使用表达式来测试请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多