如何在重写规则中传递参数并指定.php文件名


How to pass parameters in Rewrite Rules with specifying the .php file name?

我有一个站点,它成功地将第一个斜杠后的内容传递到指定的.php文件。(优雅地:删除".php")

site.com/azamat to site.com/azamat.php

RewriteCond %{REQUEST_FILENAME} !-d    
RewriteCond %{REQUEST_FILENAME}'.php -f   
RewriteRule ^(.*)$ $1.php [NC]

如何向这些规则添加其他参数,以便传递"页面"参数,例如:

site.com/azamat/bagatov to site.com/azamat.php?page=bagatov

site.com/thisisthefile/andparams to site.com/thisisthefile.php?page=andparams

尝试添加这些规则(保留已有的规则):

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([^/]+)/.+$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([^/]+)/(.+)$ /$1.php?page=$2 [L]

这或多或少类似于你所拥有的,除了使用%1反向引用来检查 URI 的第一部分是否作为 php 文件存在。这是第一部分的匹配:

RewriteCond %{REQUEST_URI} ^/([^/]+)/.+$

这是查看([^/]+)分组是否作为 php 文件存在的方法:

RewriteCond %{DOCUMENT_ROOT}/%1.php -f

其他一切都是为了匹配第一个/之后的内容,并将其作为page查询字符串参数。