Apache - 需要将 /contact/ 重写为 /contact.php

Apache - 需要将 /contact/ 重写为 /contact.php

使用.htaccess我的上一个问题,我对其进行了编辑,添加了一条重写规则,用于重写到 和/contact//contact.php虽然第二个可以工作,但第一个仍然会查找不存在的实际目录,并返回代码。两个重定向到 nice URL 变体的工作方式都与预期一致。这是我的设置:/xyz/contact//contact.php?lang=xyz404.htaccess

# No directory listing, no multi views, follow symlinks
Options -Indexes -MultiViews +FollowSymLinks

# Redirects and rewrites allowed
RewriteEngine on

# ...

# Redirect direct requests for "contact.php?lang=xyz" to "/xyz/contact/"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^lang=([a-z]{2,3})$
RewriteRule ^contact\.php$ /%1/contact/? [R=301,L]

# Redirect direct request for "contact.php" to "/contact/"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^contact\.php$ /contact/? [R=301,L]

# Internally rewrite "/xyz/contact/" to "/contact.php?lang=xyz"
RewriteRule ^([a-z]{2,3})/contact/?$ /contact.php?lang=$1 [L]

# ...

# Internally rewrite "/contact/" to "/contact.php"
RewriteRule ^/contact/?$ /contact.php [L]

答案1

# Internally rewrite "/contact/" to "/contact.php"
RewriteRule ^/contact/?$ /contact.php [L]

在每个目录.htaccess文件中,你需要删除RewriteRule 图案(就像您在之前的指令中所做的那样)。因此应该写成:

RewriteRule ^contact/?$ /contact.php [L]

这与/contact和 的请求相匹配/contact/

斜线前缀不用于RewriteRule 图案因为在某种.htaccess语境中,目录前缀(以斜线结尾)首先从 URL 路径中删除,RewriteRule 图案比赛。(目录前缀是文件所在的文件系统路径.htaccess。)

相关内容