使用.htaccess重写url后出现404错误

时间:2017-06-05 05:38:47

标签: .htaccess

我在网站上使用网址重写。

我是这些网址:

  

工作原理
      example.com/_new/app/planning
      example.com/_new/app/user_info   

  不起作用(404)
      example.com/_new/try
      example.com/_new/features

这是我的规则:

RewriteEngine On

# Removing extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# example.com/app/[module]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/([^/]+)$ app.php?param1=$1 [L]

# example.com/app/[module]/[action]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/([^/]+)/([^/]+)$ app.php?param1=$1&param2=$2 [L]

# example.com/app/[module]/[action]/[type]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/([^/]+)/([^/]+)/([^/]+)$ app.php?param1=$1&param2=$2&param3=$3 [L]

# example.com/app/[module]/[action]/[type]/[id]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ app.php?param1=$1&param2=$2&param3=$3&param4=$4 [L]

这里是文件结构:

/_new/
/_new/try.php
/_new/login.php
/_new/app.php

try.phpindex.php应显示为example.com/tryexample.com/login

app.php从另一个目录加载模块。这应该是: example.com/app/module_name

问题是什么?

感谢。

1 个答案:

答案 0 :(得分:2)

htaccess中,匹配会跳过基本网址example.com,在您的文件中,第一个正则表达式([^\.]+)将与/_new/try匹配,并尝试重定向你到了一个不存在的文件/_new/try.php,因此404。

确保在尝试使用该网址之前测试您的正则表达式,您可以从https://regex101.com/中受益以进行测试。