apache RewriteRule无法正常工作

时间:2015-06-05 15:49:17

标签: apache .htaccess mod-rewrite

我有这个网址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链接只是一个例子而不是实际的链接

1 个答案:

答案 0 :(得分:0)

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

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 - 它本质上是多余的,因为您已经使用表达式来测试请求。