.htaccess url 用变量重写

2022-01-04 00:00:00 php .htaccess mod-rewrite url-rewriting

我试图通过使用重写来更改我网站上特定子目录中的网址:
www.example.com/sub/file/{some_number}/内部:
www.example.com/sub/file.php?var={some_number}
我不断收到 404.我已经使用如下所示的 .htaccess 文件从我的网站中删除了 .php 扩展名:

I'm trying to make my urls look prettier in a specific subdirectory on my site by using rewrite to change:
www.example.com/sub/file/{some_number}/ internally to:
www.example.com/sub/file.php?var={some_number}
And I keep getting a 404. I'm already removing the .php extension from my site using an .htaccess file that looks like this:

RewriteEngine on
#
## Internally rewrite extensionless file requests to .php files ##
#
# If the requested URI does not contain a period in the final path-part
RewriteCond %{REQUEST_URI} !(.[^./]+)$
# and if it does not exist as a directory
RewriteCond %{REQUEST_FILENAME} !-d
# and if it does not exist as a file
RewriteCond %{REQUEST_FILENAME} !-f
# then add .php to get the actual filename
RewriteRule (.*) /$1.php [L]
#
## Externally redirect clients directly requesting .html page URIs to extensionless URIs
#
# If client request header contains html file extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^.]+.)+html HTTP
# externally redirect to extensionless URI
RewriteRule ^(.+).html$ http://www.dirtycoffee.com/$1 [R=301,L]

# If client request header contains php file extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^.]+.)+php HTTP
# externally redirect to extensionless URI
RewriteRule ^(.+).php$ http://www.dirtycoffee.com/$1 [R=301,L]

我目前的尝试是在顶部添加一行,例如:

My current attempt is to add a line at the top like:

#Subdirectory rewrite:
RewriteRule ^sub/file/([0-9]+)/?$ sub/file?num=$1 [L] # Handle requests for file

我知道我一定有相互冲突的规则,但我认为如果应用新规则,[L] 就会停止.

I know I must have conflicting rules, but I thought [L] would just stop if the new rule was applied.

推荐答案

代替:

RewriteRule ^sub/file/([0-9]+)/?$ sub/file?num=$1 [L]

试试:

RewriteRule ^sub/file/([0-9]+)/?$ /sub/file.php?num=$1 [L]

[L] 将停止处理规则是正确的,但这也意味着您不能消除 .php 扩展名,因为它的规则低于此规则.还要注意前导斜杠.

You're correct that [L] will stop processing rules, but that also means that you can't eliminate the .php extension since the rule for that is below this one. Also note the leading slash.

相关文章