php - .htaccess url 用变量重写

标签 php .htaccess mod-rewrite url-rewriting

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

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]

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

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

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

最佳答案

代替:

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

尝试:

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

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

关于php - .htaccess url 用变量重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827779/

相关文章:

java - 正则表达式 URL 检查

.htaccess - 如何编写 htaccess 重写规则来排除 IP 范围?

javascript - 如何使用javascript从外部文件加载php vars

php - SSL 错误 : UNABLE_TO_VERIFY_LEAF_SIGNATURE

regex - .htaccess 如果 URL 错误,请执行某些操作

php - 由于 index.php 导致 Codeigniter 500 内部服务器错误

php json - 以返回的数组顺序显示问题(json 排序)

PHP 电子邮件服务器

php - 当我在 .htaccess 中使用/(斜杠)时,css、js 和图像不起作用

Apache RewriteRule 重定向,带有 url 编码