我在网站上使用网址重写。
我是这些网址:
工作原理
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¶m2=$2 [L]
# example.com/app/[module]/[action]/[type]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/([^/]+)/([^/]+)/([^/]+)$ app.php?param1=$1¶m2=$2¶m3=$3 [L]
# example.com/app/[module]/[action]/[type]/[id]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ app.php?param1=$1¶m2=$2¶m3=$3¶m4=$4 [L]
这里是文件结构:
/_new/
/_new/try.php
/_new/login.php
/_new/app.php
try.php
和index.php
应显示为example.com/try
或example.com/login
。
app.php
从另一个目录加载模块。这应该是:
example.com/app/module_name
。
问题是什么?
感谢。
答案 0 :(得分:2)
在htaccess
中,匹配会跳过基本网址example.com
,在您的文件中,第一个正则表达式([^\.]+)
将与/_new/try
匹配,并尝试重定向你到了一个不存在的文件/_new/try.php
,因此404。
确保在尝试使用该网址之前测试您的正则表达式,您可以从https://regex101.com/中受益以进行测试。