我有以下.htaccess
文件,可帮助我将http://domain/path/project.php?id=1
重写为http://domain/path/project/1
。
RewriteBase /
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ project.php?id=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ project.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ project.php [QSA,NC,L]
但是我需要以相同的方式替换当前目录中的所有php。我有edit_project.php?id=1
,delete_project.php?id=1
等。id
是所有php的默认参数,除了一些。所以我希望htaccess能够做到以下几点。
http://domain/path/*.php?id=1
为http://domain/path/*/id
当没有id时,它应该看起来像http://domain/path/*
,当有其他参数时,它应该看起来像http://domain/path/*?param=value
由于我是.htaccess的新手,所以我们将不胜感激。还请解释一下这是如何工作的。
答案 0 :(得分:2)
您可以使用以下内容:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^path/([^/]+)/?([0-9]*)/?$ $1.php?id=$2 [QSA,NC,L]
这会将 / path / file / id 重写为 /file.php?id=id
由于$ 1代表第一组([^/]+)
的匹配,而$ 2代表第二组([0-9]*)
的匹配
答案 1 :(得分:0)
您可以在根目录中使用这些规则.htaccess:
RewriteEngine On
# redirect /path/file.php?id=123 to /path/file/123
RewriteCond %{THE_REQUEST} /(path/.+)\.php\?id=([^\s&]+) [NC]
RewriteRule ^ /%1/%2? [R=302,L,NE]
# hide .php extension
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]
# rewrite /path/file/123 to /path/file.php?id=123
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(path/[^/]+)/([^/]+)/?$ $1.php?id=$2 [QSA,NC,L]
# hide .php extension
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(path/[^/]+)/?$ $1.php [NC,L]
确保/path/
目录中没有.htaccess。